Current section

Files

Jump to
nldoc_gutenberg lib nldoc gutenberg post.ex
Raw

lib/nldoc/gutenberg/post.ex

defmodule NLdoc.Gutenberg.Post do
@moduledoc """
Type definition of Gutenberg block
"""
use TypedEctoSchema
import Ecto.Changeset
alias NLdoc.Gutenberg
@primary_key false
typed_embedded_schema null: false do
field(:id, Ecto.UUID)
embeds_many(:blocks, Gutenberg.Block, on_replace: :delete)
end
@doc """
Create new Gutenberg block based on map.
"""
@spec new(map()) :: {:ok, __MODULE__.t()} | {:error, Ecto.Changeset.t()}
def new(template) when is_map(template) do
changeset = changeset(%__MODULE__{}, template)
if changeset.valid? do
document = Ecto.Changeset.apply_changes(changeset)
{:ok, document}
else
{:error, changeset}
end
end
@doc """
Changeset for Gutenberg block
"""
def changeset(post, attrs) do
post
|> cast(attrs, [:id])
|> cast_embed(:blocks)
end
end