fp/apps/bright/lib/bright/users.ex
CJ_Clippy aa75c224fc
Some checks failed
ci / build (push) Failing after 23m29s
ci / Tests & Checks (push) Failing after 3m32s
move services/bright to apps/bright
2025-02-10 08:16:50 -08:00

109 lines
2.0 KiB
Elixir

defmodule Bright.Users do
@moduledoc """
The Users context.
"""
import Ecto.Query, warn: false
alias Bright.Repo
alias Bright.Users.User
## Database getters
@doc """
Get a user using ueberauth data
"""
def get_by_ueberauth(%{provider: :github, uid: uid}) do
Repo.get_by(User, github_id: uid)
end
def get_by_ueberauth(%{provider: :patreon, uid: uid}) do
Repo.get_by(User, patreon_id: uid)
end
@doc """
Updates a user.
## Examples
iex> update_user(user, %{field: new_value})
{:ok, %User{}}
iex> update_user(user, %{field: bad_value})
{:error, %Ecto.Changeset{}}
"""
def update_user(%User{} = user, attrs) do
user
|> User.changeset(attrs)
|> Repo.update()
end
@doc """
Gets a single user.
Raises `Ecto.NoResultsError` if the User does not exist.
## Examples
iex> get_user!(123)
%User{}
iex> get_user!(456)
** (Ecto.NoResultsError)
"""
def get_user!(id), do: Repo.get!(User, id)
## User registration
@spec register_user(
:invalid
| %{optional(:__struct__) => none(), optional(atom() | binary()) => any()}
) :: any()
@doc """
Registers a user.
## Examples
iex> register_user(%{field: value})
{:ok, %User{}}
iex> register_user(%{field: bad_value})
{:error, %Ecto.Changeset{}}
"""
def register_user(attrs) do
%User{}
|> User.registration_changeset(attrs)
|> Repo.insert()
end
@doc """
Returns an `%Ecto.Changeset{}` for tracking user changes.
## Examples
iex> change_user_registration(user)
%Ecto.Changeset{data: %User{}}
"""
def change_user_registration(%User{} = user, attrs \\ %{}) do
User.registration_changeset(user, attrs)
end
## Settings
## Session
def decoded_data(encoded) do
case Base.decode16(encoded) do
{:ok, decoded} -> {:ok, String.split(decoded, "|")}
:error -> {:error, ["", ""]}
end
end
def admin?(%User{id: id}) when id in [1], do: true
def admin?(_), do: false
end