defmodule LayoutBuilder.Layout.Col do use Ecto.Schema import Ecto.Changeset alias Ecto.UUID alias LayoutBuilder.Layout.Row @moduledoc """ Col represents a column inside a Row of a Layout. """ @type t() :: %__MODULE__{ id: Ecto.UUID.t() | nil, name: String.t(), rows: list(Row.t()) | nil, } embedded_schema do field :name, :string embeds_many :rows, Row end @spec build_col :: %__MODULE__{ id: Ecto.UUID.t(), name: nil, rows: [] } def build_col(), do: %__MODULE__{id: UUID.generate()} def changeset(%__MODULE__{} = struct, attrs) do change(struct) |> changeset(attrs) end def changeset(%Ecto.Changeset{} = change, %__MODULE__{} = attrs) do changeset(change, Map.from_struct(attrs)) end def changeset(%Ecto.Changeset{} = change, %{} = attrs) do change |> cast(attrs, [:name]) |> cast_embed(:rows) end end