Refactor Mobilizon.Federation.ActivityPub and add typespecs
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
@@ -14,10 +14,13 @@ defmodule Mobilizon.GraphQL.Resolvers.Comment do
|
||||
|
||||
require Logger
|
||||
|
||||
@spec get_thread(any(), map(), Absinthe.Resolution.t()) :: {:ok, [CommentModel.t()]}
|
||||
def get_thread(_parent, %{id: thread_id}, _context) do
|
||||
{:ok, Discussions.get_thread_replies(thread_id)}
|
||||
end
|
||||
|
||||
@spec create_comment(any(), map(), Absinthe.Resolution.t()) ::
|
||||
{:ok, CommentModel.t()} | {:error, :unauthorized | :not_found | any() | String.t()}
|
||||
def create_comment(
|
||||
_parent,
|
||||
%{event_id: event_id} = args,
|
||||
@@ -27,25 +30,28 @@ defmodule Mobilizon.GraphQL.Resolvers.Comment do
|
||||
}
|
||||
}
|
||||
) do
|
||||
with {:find_event,
|
||||
{:ok,
|
||||
%Event{
|
||||
options: %EventOptions{comment_moderation: comment_moderation},
|
||||
organizer_actor_id: organizer_actor_id
|
||||
}}} <-
|
||||
{:find_event, Events.get_event(event_id)},
|
||||
{:allowed, true} <-
|
||||
{:allowed, comment_moderation != :closed || actor_id == organizer_actor_id},
|
||||
args <- Map.put(args, :actor_id, actor_id),
|
||||
{:ok, _, %CommentModel{} = comment} <-
|
||||
Comments.create_comment(args) do
|
||||
{:ok, comment}
|
||||
else
|
||||
{:error, err} ->
|
||||
{:error, err}
|
||||
case Events.get_event(event_id) do
|
||||
{:ok,
|
||||
%Event{
|
||||
options: %EventOptions{comment_moderation: comment_moderation},
|
||||
organizer_actor_id: organizer_actor_id
|
||||
}} ->
|
||||
if comment_moderation != :closed || actor_id == organizer_actor_id do
|
||||
args = Map.put(args, :actor_id, actor_id)
|
||||
|
||||
{:allowed, false} ->
|
||||
{:error, :unauthorized}
|
||||
case Comments.create_comment(args) do
|
||||
{:ok, _, %CommentModel{} = comment} ->
|
||||
{:ok, comment}
|
||||
|
||||
{:error, err} ->
|
||||
{:error, err}
|
||||
end
|
||||
else
|
||||
{:error, :unauthorized}
|
||||
end
|
||||
|
||||
{:error, :event_not_found} ->
|
||||
{:error, :not_found}
|
||||
end
|
||||
end
|
||||
|
||||
@@ -53,6 +59,8 @@ defmodule Mobilizon.GraphQL.Resolvers.Comment do
|
||||
{:error, dgettext("errors", "You are not allowed to create a comment if not connected")}
|
||||
end
|
||||
|
||||
@spec update_comment(any(), map(), Absinthe.Resolution.t()) ::
|
||||
{:ok, CommentModel.t()} | {:error, :unauthorized | :not_found | any() | String.t()}
|
||||
def update_comment(
|
||||
_parent,
|
||||
%{text: text, comment_id: comment_id},
|
||||
@@ -62,11 +70,22 @@ defmodule Mobilizon.GraphQL.Resolvers.Comment do
|
||||
}
|
||||
}
|
||||
) do
|
||||
with %CommentModel{actor_id: comment_actor_id} = comment <-
|
||||
Mobilizon.Discussions.get_comment_with_preload(comment_id),
|
||||
true <- actor_id == comment_actor_id,
|
||||
{:ok, _, %CommentModel{} = comment} <- Comments.update_comment(comment, %{text: text}) do
|
||||
{:ok, comment}
|
||||
case Mobilizon.Discussions.get_comment_with_preload(comment_id) do
|
||||
%CommentModel{actor_id: comment_actor_id} = comment ->
|
||||
if actor_id == comment_actor_id do
|
||||
case Comments.update_comment(comment, %{text: text}) do
|
||||
{:ok, _, %CommentModel{} = comment} ->
|
||||
{:ok, comment}
|
||||
|
||||
{:error, err} ->
|
||||
{:error, err}
|
||||
end
|
||||
else
|
||||
{:error, dgettext("errors", "You are not the comment creator")}
|
||||
end
|
||||
|
||||
nil ->
|
||||
{:error, :not_found}
|
||||
end
|
||||
end
|
||||
|
||||
@@ -114,10 +133,15 @@ defmodule Mobilizon.GraphQL.Resolvers.Comment do
|
||||
{:error, dgettext("errors", "You are not allowed to delete a comment if not connected")}
|
||||
end
|
||||
|
||||
@spec do_delete_comment(CommentModel.t(), Actor.t()) ::
|
||||
{:ok, CommentModel.t()} | {:error, any()}
|
||||
defp do_delete_comment(%CommentModel{} = comment, %Actor{} = actor) do
|
||||
with {:ok, _, %CommentModel{} = comment} <-
|
||||
Comments.delete_comment(comment, actor) do
|
||||
{:ok, comment}
|
||||
case Comments.delete_comment(comment, actor) do
|
||||
{:ok, _, %CommentModel{} = comment} ->
|
||||
{:ok, comment}
|
||||
|
||||
{:error, err} ->
|
||||
{:error, err}
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user