Current section

Files

Jump to
blossom lib blossom schemas verification_codes.ex
Raw

lib/blossom/schemas/verification_codes.ex

defmodule Blossom.Schemas.VerificationsCodes do
alias Ecto.Changeset
alias KilnCore.Builders.Schema, as: Builder
alias KilnCore.Utils
defmacro __using__(opts \\ []) do
quote do
use KilnCore.Schema,
repo: unquote(opts)[:repo],
private_fields: [:code, :inserted_at, :updated_at],
required_fields: [:code, :kind, :expiration, :user],
writable_fields: [:id, :code, :kind, :expiration, :user]
import Djinn
@users Utils.option_or_mod_replace(
@caller,
unquote(opts),
:users,
Users,
2
)
schema "verification_codes" do
field(:code, :string)
field(:kind, :string)
field(:expiration, :integer)
belongs_to(:users, @users, foreign_key: :user)
timestamps()
end
def check_constraints(changeset) do
changeset
|> Changeset.unique_constraint(:code)
|> Changeset.foreign_key_constraint(:user)
end
filter_value("kind", [v], v)
def filter_by_code(query, %{"code" => code}) do
where(query, [v], v.code == ^code)
end
def filter_by_code(query, _params), do: query
def filter_by_params(query, params) do
query
|> filter_by_id(params)
|> filter_by_code(params)
|> filter_by_kind(params)
end
def delete_selected(query) do
query
|> @repo.delete_all()
|> Builder.handle_error()
end
def delete(id) when byte_size(id) == 36 do
@caller
|> where(id: ^id)
|> @caller.delete_selected()
end
def delete(code) do
@caller
|> where(code: ^code)
|> @caller.delete_selected()
end
end
end
end