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