fix: parity in behaviour for scripts, templates and posts

This commit is contained in:
2026-05-02 19:50:13 +02:00
parent 73e066c330
commit 2be751400d
8 changed files with 331 additions and 82 deletions

View File

@@ -43,7 +43,12 @@ defmodule BDS.Templates do
end
@spec get_template(String.t()) :: Template.t() | nil
def get_template(template_id), do: Repo.get(Template, template_id)
def get_template(template_id) do
case Repo.get(Template, template_id) do
%Template{} = template -> hydrate_template_content(template)
nil -> nil
end
end
@spec publish_template(String.t()) :: template_result() | {:error, :not_found}
def publish_template(template_id) do
@@ -97,7 +102,7 @@ defmodule BDS.Templates do
end
content_changed? =
has_attr?(attrs, :content) and attr(attrs, :content) != template.content
has_attr?(attrs, :content) and attr(attrs, :content) != effective_template_content(template)
slug_changed? = next_slug != template.slug
now = Persistence.now_ms()
@@ -458,6 +463,24 @@ defmodule BDS.Templates do
end
end
defp effective_template_content(%Template{} = template) do
case hydrate_template_content(template) do
%Template{content: content} when is_binary(content) -> content
_other -> ""
end
end
defp hydrate_template_content(%Template{} = template) do
case template do
%Template{content: content} when is_binary(content) -> template
%Template{status: :published, file_path: file_path} when file_path not in [nil, ""] ->
%{template | content: published_template_body(template)}
_other ->
template
end
end
defp upsert_template_from_file(project_id, project, path) do
contents = File.read!(path)
{:ok, %{fields: fields}} = Frontmatter.parse_document(contents)