50 lines
2.8 KiB
Elixir
50 lines
2.8 KiB
Elixir
defmodule <%= @namespace %>.<%= @version %>.<%= class_name(@resource_name) %> do
|
|
use Ecto.Schema
|
|
import Ecto.Changeset
|
|
|
|
@fields [
|
|
<%= @all_fields |> Enum.map(fn name -> ~s(:#{Recase.to_snake(name)}) end) |> Enum.join(",\n") %>
|
|
]
|
|
@required_fields [
|
|
<%= @required_fields |> Enum.map(fn name -> ~s(:#{Recase.to_snake(name)}) end) |> Enum.join(",\n") %>
|
|
]
|
|
|
|
embedded_schema do
|
|
<%= if @properties.const != [] do %># Constants<% end %>
|
|
<%= for {name, df, _} <- @properties.const do %>field :<%= Recase.to_snake(name) %>, :string, virtual: true, default: "<%= df["const"] %>"
|
|
<% end %>
|
|
<%= if @properties.value != [] do %># Fields<% end %>
|
|
<%= for {name, df, _} <- @properties.value do %>field :<%= Recase.to_snake(name) %>, :<%= fhir_type_to_ecto(df) %>
|
|
<% end %>
|
|
<%= for {name, df, _} <- @properties.array do %>field :<%= Recase.to_snake(name) %>, <%= inspect(fhir_type_to_ecto(df)) %>
|
|
<% end %>
|
|
<%= if @properties.enum != [] do %># Enum<% end %>
|
|
<%= for {name, df, _} <- @properties.enum do %>field :<%= Recase.to_snake(name) %>, Ecto.Enum, values: <%= enum_value_string(df) %>
|
|
<% end %>
|
|
<%= if @properties.embeds_one != [] do %># Embed One<% end %>
|
|
<%= for {name, df, _} <- @properties.embeds_one do %>embeds_one :<%= Recase.to_snake(name) %>, <%= @namespace %>.<%= @version %>.<%= ref_to_class_name(df["$ref"]) %>
|
|
<% end %>
|
|
<%= if @properties.embeds_many != [] do %># Embed Many<% end %>
|
|
<%= for {name, df, _} <- @properties.embeds_many do %>embeds_many :<%= Recase.to_snake(name) %>, <%= @namespace %>.<%= @version %>.<%= ref_to_class_name(df["items"]["$ref"]) %>
|
|
<% end %>
|
|
<%= if @properties.has_one != [] do %># Has One<% end %>
|
|
<%= for {name, df, _} <- @properties.has_one do %>has_one :<%= Recase.to_snake(name) %>, <%= @namespace %>.<%= @version %>.<%= ref_to_class_name(df["$ref"]) %>
|
|
<% end %>
|
|
<%= if @properties.has_many != [] do %># Has Many<% end %>
|
|
<%= for {name, df, _} <- @properties.has_many do %>has_many :<%= Recase.to_snake(name) %>, <%= @namespace %>.<%= @version %>.<%= ref_to_class_name(df["items"]["$ref"]) %>
|
|
<% end %>
|
|
end
|
|
|
|
def version_namespace, do: <%= @namespace %>.<%= @version %>
|
|
def version, do: "<%= @version %>"
|
|
|
|
def base_changeset(data \\ %__MODULE__{}, attrs) do
|
|
data
|
|
|> cast(attrs, @fields)
|
|
<%= for {name, df, _} <- @properties.has_one do %>|> cast_assoc(:<%= Recase.to_snake(name) %>, with: &<%= @namespace %>.<%= @version %>.<%= ref_to_class_name(df["$ref"]) %>.base_changeset/1)
|
|
<% end %>
|
|
<%= for {name, df, _} <- @properties.has_many do %>|> cast_assoc(:<%= Recase.to_snake(name) %>, with: &<%= @namespace %>.<%= @version %>.<%= ref_to_class_name(df["items"]["$ref"]) %>.base_changeset/1)
|
|
<% end %>
|
|
|> validate_required(@required_fields)
|
|
end
|
|
end
|