diff --git a/lib/sukaato/comment.ex b/lib/sukaato/comment.ex new file mode 100644 index 0000000..30e7fca --- /dev/null +++ b/lib/sukaato/comment.ex @@ -0,0 +1,23 @@ +defmodule Sukaato.Comment do + use Ecto.Schema + import Ecto.Changeset + + schema "comments" do + field :slug, :string + field :tripcode, :string + field :content, :string + field :ledit, :utc_datetime + field :post_id, :id + field :reply_to, :id + + timestamps(type: :utc_datetime) + end + + @doc false + def changeset(comment, attrs) do + comment + |> cast(attrs, [:slug, :tripcode, :content, :ledit]) + |> validate_required([:slug, :tripcode, :content, :ledit]) + |> unique_constraint(:tripcode) + end +end diff --git a/lib/sukaato/folio.ex b/lib/sukaato/folio.ex new file mode 100644 index 0000000..63a8611 --- /dev/null +++ b/lib/sukaato/folio.ex @@ -0,0 +1,24 @@ +defmodule Sukaato.Folio do + use Ecto.Schema + import Ecto.Changeset + import Sukaato.Vschemas + import Sukaato.CustomValidators + + schema "folios" do + field :resume, :map + field :showcase, :map + field :theme_uri, :string + field :user_id, :id + + timestamps(type: :utc_datetime) + end + + @doc false + def changeset(folio, attrs) do + folio + |> cast(attrs, [:resume, :showcase, :theme_uri]) + |> validate_required([:user_id, :showcase]) + |> validate_map_format(:resume, @resume_vschema) + |> validate_map_format(:showcase, @showcase_vschema) + end +end diff --git a/lib/sukaato/post.ex b/lib/sukaato/post.ex new file mode 100644 index 0000000..96c79c6 --- /dev/null +++ b/lib/sukaato/post.ex @@ -0,0 +1,28 @@ +defmodule Sukaato.Post do + use Ecto.Schema + import Ecto.Changeset + # import Sukaato.CustomValidators + + schema "posts" do + field :title, :string + field :cat, :string + field :abst, :string + field :slug, :string + field :content, :string + field :tags, {:array, :string} + field :ledit, :utc_datetime + field :auth_id, :id + field :rev_id, :id + + timestamps(type: :utc_datetime) + end + + @doc false + def changeset(post, attrs) do + post + |> cast(attrs, [:title, :abst, :slug, :content, :tags, :cat, :ledit]) + |> validate_required([:title, :slug, :content, :cat, :ledit]) + |> validate_format(:cat, ~r/^(\.(\w)+)+/) + |> unique_constraint(:title) + end +end diff --git a/lib/sukaato/user.ex b/lib/sukaato/user.ex new file mode 100644 index 0000000..be13ca0 --- /dev/null +++ b/lib/sukaato/user.ex @@ -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