Added database data structures for processing and validating database table updates

This commit is contained in:
Alex Tavarez
2025-07-25 11:34:30 -04:00
parent 8eeeee3090
commit e1a9f32c21
4 changed files with 111 additions and 0 deletions

36
lib/sukaato/user.ex Normal file
View File

@@ -0,0 +1,36 @@
defmodule Sukaato.User do
use Ecto.Schema
import Ecto.Changeset
alias Sukaato.Vschemas
import Sukaato.CustomValidators
schema "users" do
field :name, :string
field :password, :string
field :username, :string
field :email, :string
field :dob, :date
field :gender_type, Ecto.Enum, values: [:trans, :cis, :nb]
field :gender_id, Ecto.Enum, values: [:fem, :masc, :combined, :fluid, :none]
field :bio, :string
field :affil, {:array, :map}
field :perms, {:array, :integer}
field :user_token, :string
field :pub_keys, :map
timestamps(type: :utc_datetime)
end
@doc false
def changeset(user, attrs) do
user
|> cast(attrs, [:name, :username, :password, :email, :dob, :gender_type, :gender_id, :bio, :affil, :perms, :user_token, :pub_keys])
|> validate_required([:username, :password, :email, :dob, :perms, :user_token])
|> validate_length(:perms, is: 6)
|> validate_format(:email, ~r/@/)
|> validate_map_format(:perms, @perms_vschema)
|> validate_map_format(:affil, @affil_vschema)
|> validate_map_format(:pub_keys, @pubkeys_vschema)
|> unique_constraint(:username)
end
end