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
phoenix_kit lib phoenix_kit activity entry.ex
Raw

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