Add users

This commit is contained in:
Mirai Kumiko 2025-06-02 17:30:35 +02:00
parent 956f2625fd
commit 162aa095d3
Signed by: miraikumiko
GPG key ID: 3F178B1B5E0CB278
15 changed files with 489 additions and 99 deletions

106
lib/nulla/users.ex Normal file
View file

@ -0,0 +1,106 @@
defmodule Nulla.Users do
@moduledoc """
The Users context.
"""
import Ecto.Query, warn: false
alias Nulla.Repo
alias Nulla.Users.User
@doc """
Returns the list of users.
## Examples
iex> list_users()
[%User{}, ...]
"""
def list_users do
Repo.all(User)
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)
def get_user_by_username!(username), do: Repo.get_by!(User, username: username)
@doc """
Creates a user.
## Examples
iex> create_user(%{field: value})
{:ok, %User{}}
iex> create_user(%{field: bad_value})
{:error, %Ecto.Changeset{}}
"""
def create_user(attrs \\ %{}) do
%User{}
|> User.changeset(attrs)
|> Repo.insert()
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 """
Deletes a user.
## Examples
iex> delete_user(user)
{:ok, %User{}}
iex> delete_user(user)
{:error, %Ecto.Changeset{}}
"""
def delete_user(%User{} = user) do
Repo.delete(user)
end
@doc """
Returns an `%Ecto.Changeset{}` for tracking user changes.
## Examples
iex> change_user(user)
%Ecto.Changeset{data: %User{}}
"""
def change_user(%User{} = user, attrs \\ %{}) do
User.changeset(user, attrs)
end
end

View file

@ -1,4 +1,4 @@
defmodule Nulla.User do
defmodule Nulla.Users.User do
use Ecto.Schema
import Ecto.Changeset
@ -13,6 +13,7 @@ defmodule Nulla.User do
field :location, :string
field :birthday, :date
field :fields, :map
field :tags, {:array, :string}
field :follow_approval, :boolean, default: false
field :is_bot, :boolean, default: false
field :is_discoverable, :boolean, default: true
@ -20,7 +21,7 @@ defmodule Nulla.User do
field :is_memorial, :boolean, default: false
field :private_key, :string
field :public_key, :string
field :avater, :string
field :avatar, :string
field :banner, :string
timestamps(type: :utc_datetime)
@ -29,7 +30,7 @@ defmodule Nulla.User do
@doc false
def changeset(user, attrs) do
user
|> cast(attrs, [:username, :email, :password, :is_moderator, :realname, :bio, :location, :birthday, :fields, :follow_approval, :is_bot, :is_discoverable, :is_indexable, :is_memorial, :private_key, :public_key, :avater, :banner])
|> validate_required([:username, :email, :password, :is_moderator, :realname, :bio, :location, :birthday, :fields, :follow_approval, :is_bot, :is_discoverable, :is_indexable, :is_memorial, :private_key, :public_key, :avater, :banner])
|> cast(attrs, [:username, :email, :password, :is_moderator, :realname, :bio, :location, :birthday, :fields, :follow_approval, :is_bot, :is_discoverable, :is_indexable, :is_memorial, :private_key, :public_key, :avatar, :banner])
|> validate_required([:username, :email, :password, :is_moderator, :realname, :bio, :location, :birthday, :fields, :follow_approval, :is_bot, :is_discoverable, :is_indexable, :is_memorial, :private_key, :public_key, :avatar, :banner])
end
end