Current section

Files

Jump to
sorcery lib services schema ecto ecto_schema.ex
Raw

lib/services/schema/ecto/ecto_schema.ex

defmodule Sorcery.Schema.EctoSchema do
@moduledoc false
import Sorcery.Schema.EctoSchema.CastableFields
defmacro __using__([meta: %{ecto: false}]), do: nil
defmacro __using__(opts) do
quote bind_quoted: [opts: opts] do
use Ecto.Schema
import Ecto.Changeset
tk = @meta[:tk]
time = @meta[:timestamps]
schema "#{tk}" do
for {k, field_struct} <- @full_fields do
field k, (Map.get(field_struct, :ecto_t) || field_struct.t), Map.take(field_struct, [:default, :source, :autogenerate, :read_after_writes, :virtual, :primary_key, :load_in_query, :redact, :skip_default_validation]) |> Enum.into([])
end
if time, do: timestamps()
end
def sorcery_insert_cs(body) do
body = gen_one(body)
%__MODULE__{}
#|> cast(body, Map.keys(@schema))
|> cast(body, castable_fields(:insert, @full_fields))
end
def sorcery_update_cs(entity, body) do
entity
#|> cast(body, Map.keys(@schema))
|> cast(body, castable_fields(:update, @full_fields))
end
tk = nil
time = nil
end
end
end