63 lines
1.4 KiB
Elixir
63 lines
1.4 KiB
Elixir
defmodule Mobilizon.Service.Activity do
|
|
@moduledoc """
|
|
Behavior for Activity creators
|
|
"""
|
|
|
|
alias Mobilizon.Activities.Activity
|
|
|
|
alias Mobilizon.Service.Activity.{
|
|
Comment,
|
|
Discussion,
|
|
Event,
|
|
Group,
|
|
Member,
|
|
Participant,
|
|
Post,
|
|
Resource
|
|
}
|
|
|
|
@callback insert_activity(entity :: struct(), options :: Keyword.t()) ::
|
|
{:ok, Oban.Job.t()} | {:ok, any()} | {:error, Ecto.Changeset.t()}
|
|
|
|
@callback get_object(object_id :: String.t() | integer()) :: struct()
|
|
|
|
@spec object(Activity.t()) :: struct() | nil
|
|
def object(%Activity{object_type: object_type, object_id: object_id}) do
|
|
do_get_object(object_type, object_id)
|
|
end
|
|
|
|
defp do_get_object(_, nil), do: nil
|
|
|
|
defp do_get_object(:event, event_id) do
|
|
Event.get_object(event_id)
|
|
end
|
|
|
|
defp do_get_object(:post, post_id) do
|
|
Post.get_object(post_id)
|
|
end
|
|
|
|
defp do_get_object(:member, member_id) do
|
|
Member.get_object(member_id)
|
|
end
|
|
|
|
defp do_get_object(:resource, resource_id) do
|
|
Resource.get_object(resource_id)
|
|
end
|
|
|
|
defp do_get_object(:discussion, discussion_id) do
|
|
Discussion.get_object(discussion_id)
|
|
end
|
|
|
|
defp do_get_object(:group, group_id) do
|
|
Group.get_object(group_id)
|
|
end
|
|
|
|
defp do_get_object(:comment, comment_id) do
|
|
Comment.get_object(comment_id)
|
|
end
|
|
|
|
defp do_get_object(:participant, participant_id) do
|
|
Participant.get_object(participant_id)
|
|
end
|
|
end
|