Packages
phoenix_kit
1.7.103
1.7.208
1.7.207
1.7.206
1.7.205
1.7.204
1.7.203
1.7.202
1.7.201
1.7.200
1.7.199
1.7.198
1.7.197
1.7.196
1.7.194
1.7.193
1.7.192
1.7.191
1.7.190
1.7.189
1.7.187
1.7.186
1.7.185
1.7.184
1.7.183
1.7.182
1.7.181
1.7.180
1.7.179
1.7.178
1.7.177
1.7.176
1.7.175
1.7.174
1.7.173
1.7.172
1.7.171
1.7.170
1.7.169
1.7.168
1.7.167
1.7.166
1.7.165
1.7.164
1.7.162
1.7.161
1.7.160
1.7.159
1.7.157
1.7.156
1.7.155
1.7.154
1.7.153
1.7.152
1.7.151
1.7.150
1.7.149
1.7.146
1.7.145
1.7.144
1.7.143
1.7.138
1.7.133
1.7.132
1.7.131
1.7.130
1.7.128
1.7.126
1.7.125
1.7.121
1.7.120
1.7.119
1.7.118
1.7.117
1.7.116
1.7.115
1.7.114
1.7.113
1.7.112
1.7.111
1.7.110
1.7.109
1.7.108
1.7.107
1.7.106
1.7.105
1.7.104
1.7.103
1.7.102
1.7.101
1.7.100
1.7.99
1.7.98
1.7.97
1.7.96
1.7.95
1.7.94
1.7.93
1.7.92
1.7.91
1.7.90
1.7.89
1.7.88
1.7.87
1.7.86
1.7.85
1.7.84
1.7.83
1.7.82
1.7.81
1.7.80
1.7.79
1.7.78
1.7.77
1.7.76
1.7.75
1.7.74
1.7.71
1.7.70
1.7.69
1.7.66
1.7.65
1.7.64
1.7.63
1.7.62
1.7.61
1.7.59
1.7.58
1.7.57
1.7.56
1.7.55
1.7.54
1.7.53
1.7.52
1.7.51
1.7.49
1.7.44
1.7.43
1.7.42
1.7.41
1.7.39
1.7.38
1.7.37
1.7.36
1.7.34
1.7.33
1.7.31
1.7.30
1.7.29
1.7.28
1.7.27
1.7.26
1.7.25
1.7.24
1.7.23
1.7.22
1.7.21
1.7.20
1.7.19
1.7.18
1.7.17
1.7.16
1.7.15
1.7.14
1.7.13
1.7.12
1.7.11
1.7.10
1.7.9
1.7.8
1.7.7
1.7.6
1.7.5
1.7.4
1.7.3
1.7.2
1.7.1
1.7.0
1.6.20
1.6.19
1.6.18
1.6.17
1.6.16
1.6.15
1.6.14
1.6.13
1.6.12
1.6.11
1.6.10
1.6.9
1.6.8
1.6.7
1.6.6
1.6.5
1.6.4
1.6.3
1.5.2
1.5.1
1.5.0
1.4.9
1.4.8
1.4.7
1.4.6
1.4.5
1.4.4
1.4.3
1.4.2
1.4.1
1.4.0
1.3.2
1.3.1
1.3.0
1.2.10
1.2.9
1.2.8
1.2.7
1.2.5
1.2.4
1.2.2
1.2.1
1.2.0
1.1.0
1.0.0
A foundation for building Elixir Phoenix apps — SaaS, social networks, ERP systems, marketplaces, and more
Current section
Files
Jump to
Current section
Files
lib/phoenix_kit/activity/entry.ex
defmodule PhoenixKit.Activity.Entry do
@moduledoc """
Schema for activity feed entries.
Records business-level actions across the platform: posts created, comments liked,
users followed, passwords changed, etc.
## Fields
- `action` — Dotted action string: "post.created", "comment.liked", "user.registered"
- `actor_uuid` — Who performed the action (FK to users)
- `resource_type` — What kind of thing was acted on: "post", "comment", "user"
- `resource_uuid` — UUID of the resource
- `target_uuid` — Optional: who was affected (e.g., follow target, message recipient)
- `metadata` — Flexible JSONB context (title, old_value, new_value, etc.)
"""
use Ecto.Schema
import Ecto.Changeset
@primary_key {:uuid, UUIDv7, autogenerate: true}
@type t :: %__MODULE__{
uuid: UUIDv7.t() | nil,
action: String.t(),
actor_uuid: UUIDv7.t() | nil,
resource_type: String.t() | nil,
resource_uuid: Ecto.UUID.t() | nil,
target_uuid: UUIDv7.t() | nil,
metadata: map(),
actor: PhoenixKit.Users.Auth.User.t() | Ecto.Association.NotLoaded.t() | nil,
target: PhoenixKit.Users.Auth.User.t() | Ecto.Association.NotLoaded.t() | nil,
inserted_at: DateTime.t() | nil
}
schema "phoenix_kit_activities" do
field(:action, :string)
field(:module, :string)
field(:mode, :string)
field(:resource_type, :string)
field(:resource_uuid, Ecto.UUID)
field(:metadata, :map, default: %{})
belongs_to(:actor, PhoenixKit.Users.Auth.User,
foreign_key: :actor_uuid,
references: :uuid,
type: UUIDv7
)
belongs_to(:target, PhoenixKit.Users.Auth.User,
foreign_key: :target_uuid,
references: :uuid,
type: UUIDv7
)
timestamps(type: :utc_datetime, updated_at: false)
end
@doc "Changeset for creating an activity entry."
def changeset(entry, attrs) do
entry
|> cast(attrs, [
:action,
:module,
:mode,
:actor_uuid,
:resource_type,
:resource_uuid,
:target_uuid,
:metadata
])
|> validate_required([:action])
|> validate_length(:action, min: 1, max: 100)
|> validate_length(:module, max: 50)
|> validate_length(:mode, max: 20)
|> validate_length(:resource_type, max: 50)
|> foreign_key_constraint(:actor_uuid)
|> foreign_key_constraint(:target_uuid)
end
end