Add relations
This commit is contained in:
parent
f43b4bd038
commit
3a57d74357
12 changed files with 81 additions and 85 deletions
|
@ -1,30 +1,62 @@
|
|||
defmodule Nulla.Models.Relation do
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
alias Nulla.Repo
|
||||
alias Nulla.Snowflake
|
||||
alias Nulla.Models.Actor
|
||||
alias Nulla.Models.Activity
|
||||
|
||||
@primary_key {:id, :integer, autogenerate: false}
|
||||
@foreign_key_type :integer
|
||||
schema "relations" do
|
||||
field :type, :string
|
||||
field :status, :string
|
||||
field :following, :boolean, default: false
|
||||
field :followed_by, :boolean, default: false
|
||||
field :showing_replies, :boolean, default: true
|
||||
field :showing_reblogs, :boolean, default: true
|
||||
field :notifying, :boolean, default: false
|
||||
field :muting, :boolean, default: false
|
||||
field :muting_notifications, :boolean, default: false
|
||||
field :blocking, :boolean, default: false
|
||||
field :blocked_by, :boolean, default: false
|
||||
field :domain_blocking, :boolean, default: false
|
||||
field :requested, :boolean, default: false
|
||||
field :note, :string
|
||||
|
||||
belongs_to :source, Actor, foreign_key: :source_id, type: :integer
|
||||
belongs_to :target, Actor, foreign_key: :target_id, type: :integer
|
||||
belongs_to :activity, Activity, foreign_key: :activity_id, type: :integer
|
||||
belongs_to :local_actor_id, Actor
|
||||
belongs_to :remote_actor_id, Actor
|
||||
|
||||
timestamps()
|
||||
end
|
||||
|
||||
@doc false
|
||||
def changeset(relation, attrs) do
|
||||
relation
|
||||
|> cast(attrs, [:id, :source_id, :target_id, :type, :status, :activity_id])
|
||||
|> validate_required([:id, :source_id, :target_id, :type])
|
||||
|> validate_inclusion(:type, ~w(follow block mute friend_request))
|
||||
|> validate_inclusion(:status, ~w(pending accepted rejected active))
|
||||
|> foreign_key_constraint(:source_id)
|
||||
|> foreign_key_constraint(:target_id)
|
||||
|> foreign_key_constraint(:activity_id)
|
||||
|> unique_constraint([:source_id, :target_id, :type])
|
||||
|> cast(attrs, [
|
||||
:id,
|
||||
:following,
|
||||
:followed_by,
|
||||
:showing_replies,
|
||||
:showing_reblogs,
|
||||
:notifying,
|
||||
:muting,
|
||||
:muting_notifications,
|
||||
:blocking,
|
||||
:blocked_by,
|
||||
:domain_blocking,
|
||||
:requested,
|
||||
:note,
|
||||
:source_id,
|
||||
:target_id
|
||||
])
|
||||
|> validate_required([:id, :local_actor_id, :remote_actor_id])
|
||||
|> unique_constraint([:local_actor_id, :remote_actor_id])
|
||||
end
|
||||
|
||||
def create_relation(attrs) do
|
||||
id = Snowflake.next_id()
|
||||
|
||||
%__MODULE__{}
|
||||
|> __MODULE__.changeset(attrs)
|
||||
|> Changeset.put_change(:id, id)
|
||||
|> Repo.insert()
|
||||
end
|
||||
end
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue