Introduce group basic federation, event new page and notifications
Signed-off-by: Thomas Citharel <tcit@tcit.fr>
This commit is contained in:
38
lib/mobilizon/users/setting.ex
Normal file
38
lib/mobilizon/users/setting.ex
Normal file
@@ -0,0 +1,38 @@
|
||||
defmodule Mobilizon.Users.Setting do
|
||||
@moduledoc """
|
||||
Module to manage users settings
|
||||
"""
|
||||
|
||||
use Ecto.Schema
|
||||
import Ecto.Changeset
|
||||
alias Mobilizon.Users.User
|
||||
|
||||
@required_attrs [:user_id]
|
||||
|
||||
@optional_attrs [
|
||||
:timezone,
|
||||
:notification_on_day,
|
||||
:notification_each_week,
|
||||
:notification_before_event
|
||||
]
|
||||
|
||||
@attrs @required_attrs ++ @optional_attrs
|
||||
|
||||
@primary_key {:user_id, :id, autogenerate: false}
|
||||
schema "user_settings" do
|
||||
field(:timezone, :string)
|
||||
field(:notification_on_day, :boolean)
|
||||
field(:notification_each_week, :boolean)
|
||||
field(:notification_before_event, :boolean)
|
||||
belongs_to(:user, User, primary_key: true, type: :id, foreign_key: :id, define_field: false)
|
||||
|
||||
timestamps()
|
||||
end
|
||||
|
||||
@doc false
|
||||
def changeset(setting, attrs) do
|
||||
setting
|
||||
|> cast(attrs, @attrs)
|
||||
|> validate_required(@required_attrs)
|
||||
end
|
||||
end
|
||||
@@ -10,7 +10,7 @@ defmodule Mobilizon.Users.User do
|
||||
alias Mobilizon.Actors.Actor
|
||||
alias Mobilizon.Crypto
|
||||
alias Mobilizon.Events.FeedToken
|
||||
alias Mobilizon.Users.UserRole
|
||||
alias Mobilizon.Users.{Setting, UserRole}
|
||||
alias Mobilizon.Web.Email.Checker
|
||||
|
||||
@type t :: %__MODULE__{
|
||||
@@ -68,6 +68,7 @@ defmodule Mobilizon.Users.User do
|
||||
belongs_to(:default_actor, Actor)
|
||||
has_many(:actors, Actor)
|
||||
has_many(:feed_tokens, FeedToken, foreign_key: :user_id)
|
||||
has_one(:settings, Setting)
|
||||
|
||||
timestamps()
|
||||
end
|
||||
|
||||
@@ -11,7 +11,7 @@ defmodule Mobilizon.Users do
|
||||
alias Mobilizon.Actors.Actor
|
||||
alias Mobilizon.Events
|
||||
alias Mobilizon.Storage.{Page, Repo}
|
||||
alias Mobilizon.Users.User
|
||||
alias Mobilizon.Users.{Setting, User}
|
||||
|
||||
alias Mobilizon.Web.Auth
|
||||
|
||||
@@ -44,6 +44,15 @@ defmodule Mobilizon.Users do
|
||||
@spec get_user!(integer | String.t()) :: User.t()
|
||||
def get_user!(id), do: Repo.get!(User, id)
|
||||
|
||||
@spec get_user(integer | String.t()) :: User.t() | nil
|
||||
def get_user(id), do: Repo.get(User, id)
|
||||
|
||||
def get_user_with_settings!(id) do
|
||||
User
|
||||
|> Repo.get(id)
|
||||
|> Repo.preload([:settings])
|
||||
end
|
||||
|
||||
@doc """
|
||||
Gets an user by its email.
|
||||
"""
|
||||
@@ -265,6 +274,96 @@ defmodule Mobilizon.Users do
|
||||
end
|
||||
end
|
||||
|
||||
@doc """
|
||||
Gets a settings for an user.
|
||||
|
||||
Raises `Ecto.NoResultsError` if the Setting does not exist.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> get_setting!(123)
|
||||
%Setting{}
|
||||
|
||||
iex> get_setting!(456)
|
||||
** (Ecto.NoResultsError)
|
||||
|
||||
"""
|
||||
def get_setting!(user_id), do: Repo.get!(Setting, user_id)
|
||||
|
||||
@spec get_setting(User.t()) :: Setting.t()
|
||||
def get_setting(%User{id: user_id}), do: get_setting(user_id)
|
||||
|
||||
@spec get_setting(String.t() | integer()) :: Setting.t()
|
||||
def get_setting(user_id), do: Repo.get(Setting, user_id)
|
||||
|
||||
@doc """
|
||||
Creates a setting.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> create_setting(%{field: value})
|
||||
{:ok, %Setting{}}
|
||||
|
||||
iex> create_setting(%{field: bad_value})
|
||||
{:error, %Ecto.Changeset{}}
|
||||
|
||||
"""
|
||||
def create_setting(attrs \\ %{}) do
|
||||
%Setting{}
|
||||
|> Setting.changeset(attrs)
|
||||
|> Repo.insert(
|
||||
on_conflict: {:replace_all_except, [:user_id, :inserted_at]},
|
||||
conflict_target: :user_id
|
||||
)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Updates a setting.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> update_setting(setting, %{field: new_value})
|
||||
{:ok, %Setting{}}
|
||||
|
||||
iex> update_setting(setting, %{field: bad_value})
|
||||
{:error, %Ecto.Changeset{}}
|
||||
|
||||
"""
|
||||
def update_setting(%Setting{} = setting, attrs) do
|
||||
setting
|
||||
|> Setting.changeset(attrs)
|
||||
|> Repo.update()
|
||||
end
|
||||
|
||||
@doc """
|
||||
Deletes a setting.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> delete_setting(setting)
|
||||
{:ok, %Setting{}}
|
||||
|
||||
iex> delete_setting(setting)
|
||||
{:error, %Ecto.Changeset{}}
|
||||
|
||||
"""
|
||||
def delete_setting(%Setting{} = setting) do
|
||||
Repo.delete(setting)
|
||||
end
|
||||
|
||||
@doc """
|
||||
Returns an `%Ecto.Changeset{}` for tracking setting changes.
|
||||
|
||||
## Examples
|
||||
|
||||
iex> change_setting(setting)
|
||||
%Ecto.Changeset{source: %Setting{}}
|
||||
|
||||
"""
|
||||
def change_setting(%Setting{} = setting) do
|
||||
Setting.changeset(setting, %{})
|
||||
end
|
||||
|
||||
@spec user_by_email_query(String.t(), boolean | nil) :: Ecto.Query.t()
|
||||
defp user_by_email_query(email, nil) do
|
||||
from(u in User,
|
||||
|
||||
Reference in New Issue
Block a user