Current section
Files
Jump to
Current section
Files
priv/templates/ecto_schema.eex
defmodule <%= inspect @module %> do
@moduledoc """
Generated by Caravela from <%= inspect @domain_module %>.
Regenerate with `mix caravela.gen.schema <%= inspect @domain_module %>`.
Custom code placed below the `# --- CUSTOM ---` marker is preserved.
"""
use Ecto.Schema
import Ecto.Changeset
@primary_key {:id, :binary_id, autogenerate: true}
@foreign_key_type :binary_id
schema "<%= @table %>" do
<%= for f <- @plain_fields do %> field :<%= f.name %>, <%= inspect Caravela.Types.ecto_type(f.type) %><%= if Keyword.has_key?(f.opts, :default), do: ", default: " <> inspect(Keyword.get(f.opts, :default)) %>
<% end %><%= for r <- @belongs_to do %> belongs_to :<%= r.assoc_name %>, <%= inspect r.target_module %>
<% end %><%= for r <- @has_many do %> has_many :<%= r.assoc_name %>, <%= inspect r.target_module %>
<% end %><%= for r <- @has_one do %> has_one :<%= r.assoc_name %>, <%= inspect r.target_module %>
<% end %>
timestamps(type: :utc_datetime)
end
@required_fields <%= inspect @required_fields %>
@optional_fields <%= inspect @optional_fields %>
@doc false
def changeset(entity, attrs) do
entity
|> cast(attrs, @required_fields ++ @optional_fields)
|> validate_required(@required_fields)
<%= for {line, _} <- @validation_lines do %> |> <%= line %>
<% end %><%= for r <- @belongs_to do %> |> foreign_key_constraint(:<%= r.fk %>)
<% end %> end
<%= @custom_marker %>