Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel
2021-03-23 15:18:03 +01:00
parent adaaef6914
commit 86c2512c62
87 changed files with 7816 additions and 1387 deletions

View File

@@ -3,15 +3,20 @@ defmodule Mobilizon.Service.Workers.ActivityBuilder do
Worker to insert activity items in users feeds
"""
alias Mobilizon.Activities
alias Mobilizon.{Activities, Actors, Users}
alias Mobilizon.Activities.Activity
alias Mobilizon.Actors.Actor
alias Mobilizon.Service.Notifier
alias Mobilizon.Users.User
use Mobilizon.Service.Workers.Helper, queue: "activity"
@impl Oban.Worker
def perform(%Job{args: args}) do
with {"build_activity", args} <- Map.pop(args, "op") do
build_activity(args)
with {"build_activity", args} <- Map.pop(args, "op"),
{:ok, %Activity{} = activity} <- build_activity(args),
preloaded_activity <- Activities.preload_activity(activity) do
notify_activity(preloaded_activity)
end
end
@@ -19,4 +24,27 @@ defmodule Mobilizon.Service.Workers.ActivityBuilder do
def build_activity(args) do
Activities.create_activity(args)
end
@spec notify_activity(Activity.t()) :: :ok
def notify_activity(%Activity{} = activity) do
activity
|> users_to_notify()
|> Enum.each(&Notifier.notify(&1, activity))
end
@spec users_to_notify(Activity.t()) :: list(User.t())
defp users_to_notify(%Activity{group: %Actor{} = group, author_id: author_id}) do
group
|> Actors.list_internal_actors_members_for_group([
:creator,
:administrator,
:moderator,
:member
])
|> Enum.filter(&(&1.id != author_id))
|> Enum.map(& &1.user_id)
|> Enum.filter(& &1)
|> Enum.uniq()
|> Enum.map(&Users.get_user!/1)
end
end

View File

@@ -0,0 +1,14 @@
defmodule Mobilizon.Service.Workers.DigestNotifierWorker do
@moduledoc """
Worker to send notifications
"""
use Mobilizon.Service.Workers.Helper, queue: "notifications"
@impl Oban.Worker
def perform(%Job{}) do
# Get last time activities were send
# List activities to send
# Send activites
end
end