@@ -3,5 +3,50 @@ defmodule Mobilizon.Service.Activity do
|
||||
Behavior for Activity creators
|
||||
"""
|
||||
|
||||
alias Mobilizon.Activities.Activity
|
||||
alias Mobilizon.Service.Activity.{Comment, Discussion, Event, Group, Member, Post, Resource}
|
||||
|
||||
@callback insert_activity(entity :: struct(), options :: map()) :: {:ok, Oban.Job.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
|
||||
|
||||
@spec has_object?(Activity.t()) :: boolean()
|
||||
def has_object?(%Activity{} = activity) do
|
||||
!is_nil(object(activity))
|
||||
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
|
||||
end
|
||||
|
||||
@@ -2,7 +2,7 @@ defmodule Mobilizon.Service.Activity.Comment do
|
||||
@moduledoc """
|
||||
Insert a comment activity
|
||||
"""
|
||||
alias Mobilizon.{Actors, Events}
|
||||
alias Mobilizon.{Actors, Discussions, Events}
|
||||
alias Mobilizon.Actors.Actor
|
||||
alias Mobilizon.Discussions.Comment
|
||||
alias Mobilizon.Events.Event
|
||||
@@ -48,4 +48,9 @@ defmodule Mobilizon.Service.Activity.Comment do
|
||||
end
|
||||
|
||||
def insert_activity(_, _), do: {:ok, nil}
|
||||
|
||||
@impl Activity
|
||||
def get_object(comment_id) do
|
||||
Discussions.get_comment(comment_id)
|
||||
end
|
||||
end
|
||||
|
||||
@@ -2,7 +2,7 @@ defmodule Mobilizon.Service.Activity.Discussion do
|
||||
@moduledoc """
|
||||
Insert a discussion activity
|
||||
"""
|
||||
alias Mobilizon.Actors
|
||||
alias Mobilizon.{Actors, Discussions}
|
||||
alias Mobilizon.Discussions.Discussion
|
||||
alias Mobilizon.Service.Activity
|
||||
alias Mobilizon.Service.Workers.ActivityBuilder
|
||||
@@ -38,6 +38,11 @@ defmodule Mobilizon.Service.Activity.Discussion do
|
||||
|
||||
def insert_activity(_, _), do: {:ok, nil}
|
||||
|
||||
@impl Activity
|
||||
def get_object(discussion_id) do
|
||||
Discussions.get_discussion(discussion_id)
|
||||
end
|
||||
|
||||
@spec subject_params(Discussion.t(), String.t() | nil, Discussion.t() | nil) :: map()
|
||||
defp subject_params(%Discussion{} = discussion, "discussion_renamed", old_discussion) do
|
||||
discussion
|
||||
|
||||
@@ -2,7 +2,7 @@ defmodule Mobilizon.Service.Activity.Event do
|
||||
@moduledoc """
|
||||
Insert an event activity
|
||||
"""
|
||||
alias Mobilizon.Actors
|
||||
alias Mobilizon.{Actors, Events}
|
||||
alias Mobilizon.Events.Event
|
||||
alias Mobilizon.Service.Activity
|
||||
alias Mobilizon.Service.Workers.ActivityBuilder
|
||||
@@ -36,4 +36,12 @@ defmodule Mobilizon.Service.Activity.Event do
|
||||
|
||||
@impl Activity
|
||||
def insert_activity(_, _), do: {:ok, nil}
|
||||
|
||||
@impl Activity
|
||||
def get_object(event_id) do
|
||||
case Events.get_event(event_id) do
|
||||
{:ok, %Event{} = event} -> event
|
||||
_ -> nil
|
||||
end
|
||||
end
|
||||
end
|
||||
|
||||
@@ -40,6 +40,11 @@ defmodule Mobilizon.Service.Activity.Group do
|
||||
|
||||
def insert_activity(_, _), do: {:ok, nil}
|
||||
|
||||
@impl Activity
|
||||
def get_object(group_id) do
|
||||
Actors.get_actor(group_id)
|
||||
end
|
||||
|
||||
@spec subject_params(Actor.t(), String.t() | nil, Actor.t() | nil) :: map()
|
||||
defp subject_params(%Actor{} = group, "group_updated", %Actor{} = old_group) do
|
||||
group
|
||||
@@ -67,7 +72,7 @@ defmodule Mobilizon.Service.Activity.Group do
|
||||
end
|
||||
|
||||
defp subject_params(
|
||||
%Actor{preferred_username: preferred_username, domain: domain, name: name},
|
||||
%Actor{preferred_username: preferred_username, domain: domain, name: name} = actor,
|
||||
_,
|
||||
_
|
||||
) do
|
||||
@@ -75,6 +80,7 @@ defmodule Mobilizon.Service.Activity.Group do
|
||||
group_preferred_username: preferred_username,
|
||||
group_name: name,
|
||||
group_domain: domain,
|
||||
group_federated_username: Actor.preferred_username_and_domain(actor),
|
||||
group_changes: []
|
||||
}
|
||||
end
|
||||
|
||||
@@ -35,6 +35,11 @@ defmodule Mobilizon.Service.Activity.Member do
|
||||
|
||||
def insert_activity(_, _), do: {:ok, nil}
|
||||
|
||||
@impl Activity
|
||||
def get_object(member_id) do
|
||||
Actors.get_member(member_id)
|
||||
end
|
||||
|
||||
@spec get_author(Member.t(), Member.t() | nil) :: String.t() | integer()
|
||||
defp get_author(%Member{actor_id: actor_id}, options) do
|
||||
moderator = Keyword.get(options, :moderator)
|
||||
@@ -72,11 +77,12 @@ defmodule Mobilizon.Service.Activity.Member do
|
||||
if(is_nil(actor),
|
||||
do: subject_params,
|
||||
else:
|
||||
Map.put(
|
||||
subject_params,
|
||||
:member_preferred_username,
|
||||
subject_params
|
||||
|> Map.put(
|
||||
:member_actor_federated_username,
|
||||
Actor.preferred_username_and_domain(actor)
|
||||
)
|
||||
|> Map.put(:member_actor_name, actor.name)
|
||||
)
|
||||
|
||||
subject_params =
|
||||
|
||||
@@ -2,7 +2,7 @@ defmodule Mobilizon.Service.Activity.Post do
|
||||
@moduledoc """
|
||||
Insert an post activity
|
||||
"""
|
||||
alias Mobilizon.Actors
|
||||
alias Mobilizon.{Actors, Posts}
|
||||
alias Mobilizon.Posts.Post
|
||||
alias Mobilizon.Service.Activity
|
||||
alias Mobilizon.Service.Workers.ActivityBuilder
|
||||
@@ -34,4 +34,9 @@ defmodule Mobilizon.Service.Activity.Post do
|
||||
end
|
||||
|
||||
def insert_activity(_, _), do: {:ok, nil}
|
||||
|
||||
@impl Activity
|
||||
def get_object(post_id) do
|
||||
Posts.get_post(post_id)
|
||||
end
|
||||
end
|
||||
@@ -2,7 +2,7 @@ defmodule Mobilizon.Service.Activity.Resource do
|
||||
@moduledoc """
|
||||
Insert an resource activity
|
||||
"""
|
||||
alias Mobilizon.Actors
|
||||
alias Mobilizon.{Actors, Resources}
|
||||
alias Mobilizon.Resources.Resource
|
||||
alias Mobilizon.Service.Activity
|
||||
alias Mobilizon.Service.Workers.ActivityBuilder
|
||||
@@ -37,6 +37,11 @@ defmodule Mobilizon.Service.Activity.Resource do
|
||||
@impl Activity
|
||||
def insert_activity(_, _), do: {:ok, nil}
|
||||
|
||||
@impl Activity
|
||||
def get_object(resource_id) do
|
||||
Resources.get_resource(resource_id)
|
||||
end
|
||||
|
||||
@spec subject_params(Resource.t(), String.t() | nil, Resource.t() | nil) :: map()
|
||||
defp subject_params(%Resource{} = resource, "resource_renamed", old_resource) do
|
||||
resource
|
||||
@@ -44,7 +49,7 @@ defmodule Mobilizon.Service.Activity.Resource do
|
||||
|> Map.put(:old_resource_title, old_resource.title)
|
||||
end
|
||||
|
||||
defp subject_params(%Resource{path: path, title: title}, _, _) do
|
||||
%{resource_path: path, resource_title: title}
|
||||
defp subject_params(%Resource{path: path, title: title, type: type, id: id}, _, _) do
|
||||
%{resource_path: path, resource_title: title, is_folder: type == :folder, resource_uuid: id}
|
||||
end
|
||||
end
|
||||
|
||||
Reference in New Issue
Block a user