WIP notification settings

Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
Thomas Citharel
2021-06-01 18:08:03 +02:00
parent 6adbbc6a1d
commit 58bffc5c66
34 changed files with 1127 additions and 136 deletions

View File

@@ -17,7 +17,7 @@ defmodule Mobilizon.Activities do
very_high: 50
)
@activity_types ["event", "post", "discussion", "resource", "group", "member"]
@activity_types ["event", "post", "discussion", "resource", "group", "member", "comment"]
@event_activity_subjects ["event_created", "event_updated", "event_deleted", "comment_posted"]
@post_activity_subjects ["post_created", "post_updated", "post_deleted"]
@discussion_activity_subjects [

View File

@@ -45,6 +45,7 @@ defmodule Mobilizon.Discussions.Comment do
:attributed_to_id,
:deleted_at,
:local,
:is_announcement,
:discussion_id
]
@attrs @required_attrs ++ @optional_attrs
@@ -58,6 +59,7 @@ defmodule Mobilizon.Discussions.Comment do
field(:total_replies, :integer, virtual: true, default: 0)
field(:deleted_at, :utc_datetime)
field(:published_at, :utc_datetime)
field(:is_announcement, :boolean, default: false)
belongs_to(:actor, Actor, foreign_key: :actor_id)
belongs_to(:attributed_to, Actor, foreign_key: :attributed_to_id)

View File

@@ -0,0 +1,34 @@
defmodule Mobilizon.Users.ActivitySetting do
@moduledoc """
Module to manage users settings
"""
use Ecto.Schema
import Ecto.Changeset
alias Mobilizon.Users.User
@type t :: %__MODULE__{
key: String.t(),
method: String.t(),
enabled: boolean()
}
@attrs [:key, :method, :enabled, :user_id]
@primary_key {:user_id, :id, autogenerate: false}
schema "user_activity_settings" do
field(:key, :string)
field(:method, :string)
field(:enabled, :boolean)
belongs_to(:user, User, primary_key: true, type: :id, foreign_key: :id, define_field: false)
end
@doc false
def changeset(activity_setting, attrs) do
activity_setting
|> cast(attrs, @attrs)
|> validate_required(@attrs)
|> unique_constraint([:key, :method], name: :user_activity_settings_user_id_key_method_index)
end
end

View File

@@ -13,7 +13,7 @@ defmodule Mobilizon.Users do
alias Mobilizon.{Crypto, Events}
alias Mobilizon.Events.FeedToken
alias Mobilizon.Storage.{Page, Repo}
alias Mobilizon.Users.{PushSubscription, Setting, User}
alias Mobilizon.Users.{ActivitySetting, PushSubscription, Setting, User}
defenum(UserRole, :user_role, [:administrator, :moderator, :user])
@@ -478,6 +478,48 @@ defmodule Mobilizon.Users do
Repo.delete(push_subscription)
end
@doc """
Lists the activity settings for an user
## Examples
iex> activity_settings_for_user(user)
[%ActivitySetting{}]
iex> activity_settings_for_user(user)
[]
"""
def activity_settings_for_user(%User{id: user_id}) do
ActivitySetting
|> where([a], a.user_id == ^user_id)
|> Repo.all()
end
def activity_setting(%User{id: user_id}, key, method) do
ActivitySetting
|> where([a], a.user_id == ^user_id and a.key == ^key and a.method == ^method)
|> Repo.one()
end
@doc """
Creates an activity setting. Overrides existing values if present
## Examples
iex> create_activity_setting(%{field: value})
{:ok, %ActivitySetting{}}
iex> create_activity_setting(%{field: bad_value})
{:error, %Ecto.Changeset{}}
"""
def create_activity_setting(attrs \\ %{}) do
%ActivitySetting{}
|> ActivitySetting.changeset(attrs)
|> Repo.insert(on_conflict: :replace_all, conflict_target: [:user_id, :key, :method])
end
@spec user_by_email_query(String.t(), boolean | nil, boolean()) :: Ecto.Query.t()
defp user_by_email_query(email, activated, unconfirmed) do
User