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.Scripts do
end
@spec get_script(String.t()) :: Script.t() | nil
def get_script(script_id), do: Repo.get(Script, script_id)
def get_script(script_id) do
case Repo.get(Script, script_id) do
%Script{} = script -> hydrate_script_content(script)
nil -> nil
end
end
@spec publish_script(String.t()) :: script_result() | {:error, :not_found}
def publish_script(script_id) do
@@ -91,7 +96,8 @@ defmodule BDS.Scripts do
script.slug
end
content_changed? = has_attr?(attrs, :content) and attr(attrs, :content) != script.content
content_changed? =
has_attr?(attrs, :content) and attr(attrs, :content) != effective_script_content(script)
now = Persistence.now_ms()
updates =
@@ -294,6 +300,24 @@ defmodule BDS.Scripts do
end
end
defp effective_script_content(%Script{} = script) do
case hydrate_script_content(script) do
%Script{content: content} when is_binary(content) -> content
_other -> ""
end
end
defp hydrate_script_content(%Script{} = script) do
case script do
%Script{content: content} when is_binary(content) -> script
%Script{status: :published, file_path: file_path} when file_path not in [nil, ""] ->
%{script | content: published_script_body(script)}
_other ->
script
end
end
defp upsert_script_from_file(project_id, project, path) do
contents = File.read!(path)
{:ok, %{fields: fields}} = Frontmatter.parse_document(contents)