Various refactoring and typespec improvements
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
@@ -82,6 +82,7 @@ defmodule Mobilizon.Posts.Post do
|
||||
@attrs @required_attrs ++ @optional_attrs
|
||||
|
||||
@doc false
|
||||
@spec changeset(t | Ecto.Schema.t(), map) :: Ecto.Changeset.t()
|
||||
def changeset(%__MODULE__{} = post, attrs) do
|
||||
post
|
||||
|> cast(attrs, @attrs)
|
||||
@@ -153,17 +154,20 @@ defmodule Mobilizon.Posts.Post do
|
||||
# In case the provided picture is an existing one
|
||||
@spec put_picture(Changeset.t(), map) :: Changeset.t()
|
||||
defp put_picture(%Changeset{} = changeset, %{picture: %{picture_id: id} = _picture}) do
|
||||
case Medias.get_media!(id) do
|
||||
%Media{} = picture ->
|
||||
put_assoc(changeset, :picture, picture)
|
||||
|
||||
_ ->
|
||||
changeset
|
||||
end
|
||||
%Media{} = picture = Medias.get_media!(id)
|
||||
put_assoc(changeset, :picture, picture)
|
||||
end
|
||||
|
||||
# In case it's a new picture
|
||||
defp put_picture(%Changeset{} = changeset, _attrs) do
|
||||
cast_assoc(changeset, :picture)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Whether we can show the post. Returns false if the organizer actor or group is suspended
|
||||
"""
|
||||
@spec show?(t) :: boolean()
|
||||
def show?(%__MODULE__{attributed_to: %Actor{suspended: true}}), do: false
|
||||
def show?(%__MODULE__{author: %Actor{suspended: true}}), do: false
|
||||
def show?(%__MODULE__{}), do: true
|
||||
end
|
||||
|
||||
@@ -21,6 +21,7 @@ defmodule Mobilizon.Posts do
|
||||
:private
|
||||
])
|
||||
|
||||
@spec list_public_local_posts(integer | nil, integer | nil) :: Page.t(Post.t())
|
||||
def list_public_local_posts(page \\ nil, limit \\ nil) do
|
||||
Post
|
||||
|> filter_public()
|
||||
@@ -144,12 +145,12 @@ defmodule Mobilizon.Posts do
|
||||
)
|
||||
end
|
||||
|
||||
@spec filter_public(Ecto.Query.t()) :: Ecto.Query.t()
|
||||
@spec filter_public(Ecto.Queryable.t()) :: Ecto.Query.t()
|
||||
defp filter_public(query) do
|
||||
where(query, [p], p.visibility == ^:public and not p.draft)
|
||||
end
|
||||
|
||||
@spec filter_local(Ecto.Query.t()) :: Ecto.Query.t()
|
||||
@spec filter_local(Ecto.Queryable.t()) :: Ecto.Query.t()
|
||||
defp filter_local(query) do
|
||||
where(query, [q], q.local == true)
|
||||
end
|
||||
@@ -161,7 +162,7 @@ defmodule Mobilizon.Posts do
|
||||
|> preload_post_associations()
|
||||
end
|
||||
|
||||
@spec preload_post_associations(Ecto.Query.t(), list()) :: Ecto.Query.t()
|
||||
@spec preload_post_associations(Ecto.Queryable.t(), list()) :: Ecto.Query.t()
|
||||
defp preload_post_associations(query, associations \\ @post_preloads) do
|
||||
preload(query, ^associations)
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user