Attach actor to pictures entity

This commit is contained in:
Thomas Citharel
2019-05-31 17:58:03 +02:00
parent 0a1f955194
commit 5b3831b4bf
15 changed files with 645 additions and 785 deletions

View File

@@ -5,9 +5,11 @@ defmodule Mobilizon.Media.Picture do
use Ecto.Schema
import Ecto.Changeset
alias Mobilizon.Media.File
alias Mobilizon.Actors.Actor
schema "pictures" do
embeds_one(:file, File, on_replace: :update)
belongs_to(:actor, Actor)
timestamps()
end
@@ -15,7 +17,7 @@ defmodule Mobilizon.Media.Picture do
@doc false
def changeset(picture, attrs) do
picture
|> cast(attrs, [])
|> cast(attrs, [:actor_id])
|> cast_embed(:file)
end
end

View File

@@ -149,6 +149,18 @@ defmodule Mobilizon.Users.User do
def is_confirmed(%User{confirmed_at: nil} = _user), do: {:error, :unconfirmed}
def is_confirmed(%User{} = user), do: {:ok, user}
@doc """
Returns whether an user owns an actor
"""
@spec owns_actor(struct(), String.t()) :: {:is_owned, false} | {:is_owned, true, Actor.t()}
def owns_actor(%User{} = user, actor_id) when is_binary(actor_id) do
case Integer.parse(actor_id) do
{actor_id, ""} -> owns_actor(user, actor_id)
_ -> {:is_owned, false}
end
end
@spec owns_actor(struct(), integer()) :: {:is_owned, false} | {:is_owned, true, Actor.t()}
def owns_actor(%User{actors: actors}, actor_id) do
case Enum.find(actors, fn a -> a.id == actor_id end) do
nil -> {:is_owned, false}