fix: cleaned up file format handling to stop constant mapping
This commit is contained in:
@@ -72,10 +72,10 @@ defmodule BDS.Maintenance do
|
||||
diff_field("author", post.author, Map.get(fields, "author")),
|
||||
diff_field("language", post.language, Map.get(fields, "language")),
|
||||
diff_field("status", post.status, Map.get(fields, "status")),
|
||||
diff_field("template_slug", post.template_slug, Map.get(fields, "template_slug")),
|
||||
diff_field("created_at", post.created_at, Map.get(fields, "created_at")),
|
||||
diff_field("updated_at", post.updated_at, Map.get(fields, "updated_at")),
|
||||
diff_field("published_at", post.published_at, Map.get(fields, "published_at")),
|
||||
diff_field("template_slug", post.template_slug, Map.get(fields, "templateSlug")),
|
||||
diff_field("created_at", post.created_at, Map.get(fields, "createdAt")),
|
||||
diff_field("updated_at", post.updated_at, Map.get(fields, "updatedAt")),
|
||||
diff_field("published_at", post.published_at, Map.get(fields, "publishedAt")),
|
||||
diff_field("tags", post.tags, Map.get(fields, "tags", [])),
|
||||
diff_field("categories", post.categories, Map.get(fields, "categories", []))
|
||||
]
|
||||
@@ -110,8 +110,8 @@ defmodule BDS.Maintenance do
|
||||
diff_field("caption", media.caption, Map.get(fields, "caption")),
|
||||
diff_field("author", media.author, Map.get(fields, "author")),
|
||||
diff_field("language", media.language, Map.get(fields, "language")),
|
||||
diff_field("created_at", media.created_at, Map.get(fields, "created_at")),
|
||||
diff_field("updated_at", media.updated_at, Map.get(fields, "updated_at")),
|
||||
diff_field("created_at", media.created_at, Map.get(fields, "createdAt")),
|
||||
diff_field("updated_at", media.updated_at, Map.get(fields, "updatedAt")),
|
||||
diff_field("tags", media.tags, Map.get(fields, "tags", []))
|
||||
]
|
||||
|> Enum.reject(&is_nil/1)
|
||||
@@ -147,14 +147,14 @@ defmodule BDS.Maintenance do
|
||||
diff_field(
|
||||
"translation_for",
|
||||
translation.translation_for,
|
||||
Map.get(fields, "translation_for")
|
||||
Map.get(fields, "translationFor")
|
||||
),
|
||||
diff_field("created_at", translation.created_at, Map.get(fields, "created_at")),
|
||||
diff_field("updated_at", translation.updated_at, Map.get(fields, "updated_at")),
|
||||
diff_field("created_at", translation.created_at, Map.get(fields, "createdAt")),
|
||||
diff_field("updated_at", translation.updated_at, Map.get(fields, "updatedAt")),
|
||||
diff_field(
|
||||
"published_at",
|
||||
translation.published_at,
|
||||
Map.get(fields, "published_at")
|
||||
Map.get(fields, "publishedAt")
|
||||
)
|
||||
]
|
||||
|> Enum.reject(&is_nil/1)
|
||||
@@ -193,7 +193,7 @@ defmodule BDS.Maintenance do
|
||||
diff_field(
|
||||
"translation_for",
|
||||
translation.translation_for,
|
||||
Map.get(fields, "translation_for")
|
||||
Map.get(fields, "translationFor")
|
||||
)
|
||||
]
|
||||
|> Enum.reject(&is_nil/1)
|
||||
@@ -231,8 +231,8 @@ defmodule BDS.Maintenance do
|
||||
diff_field("title", script.title, Map.get(fields, "title")),
|
||||
diff_field("entrypoint", script.entrypoint, Map.get(fields, "entrypoint")),
|
||||
diff_field("enabled", script.enabled, Map.get(fields, "enabled")),
|
||||
diff_field("created_at", script.created_at, Map.get(fields, "created_at")),
|
||||
diff_field("updated_at", script.updated_at, Map.get(fields, "updated_at"))
|
||||
diff_field("created_at", script.created_at, Map.get(fields, "createdAt")),
|
||||
diff_field("updated_at", script.updated_at, Map.get(fields, "updatedAt"))
|
||||
]
|
||||
|> Enum.reject(&is_nil/1)
|
||||
|
||||
@@ -262,8 +262,8 @@ defmodule BDS.Maintenance do
|
||||
[
|
||||
diff_field("title", template.title, Map.get(fields, "title")),
|
||||
diff_field("enabled", template.enabled, Map.get(fields, "enabled")),
|
||||
diff_field("created_at", template.created_at, Map.get(fields, "created_at")),
|
||||
diff_field("updated_at", template.updated_at, Map.get(fields, "updated_at"))
|
||||
diff_field("created_at", template.created_at, Map.get(fields, "createdAt")),
|
||||
diff_field("updated_at", template.updated_at, Map.get(fields, "updatedAt"))
|
||||
]
|
||||
|> Enum.reject(&is_nil/1)
|
||||
|
||||
|
||||
@@ -341,7 +341,6 @@ defmodule BDS.Media do
|
||||
|
||||
defp upsert_media_from_sidecar(project, sidecar_path) do
|
||||
{:ok, fields} = sidecar_path |> File.read!() |> Sidecar.parse_document()
|
||||
fields = normalize_media_sidecar_fields(fields)
|
||||
relative_sidecar_path = Path.relative_to(sidecar_path, Projects.project_data_dir(project))
|
||||
relative_file_path = String.trim_trailing(relative_sidecar_path, ".meta")
|
||||
filename = Path.basename(relative_file_path)
|
||||
@@ -351,8 +350,8 @@ defmodule BDS.Media do
|
||||
id: Map.get(fields, "id") || Ecto.UUID.generate(),
|
||||
project_id: project.id,
|
||||
filename: filename,
|
||||
original_name: Map.get(fields, "original_name") || filename,
|
||||
mime_type: Map.get(fields, "mime_type") || detect_mime(filename),
|
||||
original_name: Map.get(fields, "originalName") || filename,
|
||||
mime_type: Map.get(fields, "mimeType") || detect_mime(filename),
|
||||
size: Map.get(fields, "size", 0),
|
||||
width: blank_to_nil(Map.get(fields, "width")),
|
||||
height: blank_to_nil(Map.get(fields, "height")),
|
||||
@@ -365,8 +364,8 @@ defmodule BDS.Media do
|
||||
sidecar_path: relative_sidecar_path,
|
||||
checksum: nil,
|
||||
tags: Map.get(fields, "tags", []),
|
||||
created_at: Map.get(fields, "created_at", now),
|
||||
updated_at: Map.get(fields, "updated_at", now)
|
||||
created_at: Map.get(fields, "createdAt", now),
|
||||
updated_at: Map.get(fields, "updatedAt", now)
|
||||
}
|
||||
|
||||
media =
|
||||
@@ -436,7 +435,6 @@ defmodule BDS.Media do
|
||||
|
||||
media ->
|
||||
{:ok, fields} = sidecar_path |> File.read!() |> Sidecar.parse_document()
|
||||
fields = normalize_media_sidecar_fields(fields)
|
||||
now = Persistence.now_ms()
|
||||
language = Map.fetch!(fields, "language")
|
||||
|
||||
@@ -610,23 +608,6 @@ defmodule BDS.Media do
|
||||
Persistence.atomic_write(path, contents)
|
||||
end
|
||||
|
||||
defp normalize_media_sidecar_fields(fields) when is_map(fields) do
|
||||
[
|
||||
{"originalName", "original_name"},
|
||||
{"mimeType", "mime_type"},
|
||||
{"createdAt", "created_at"},
|
||||
{"updatedAt", "updated_at"},
|
||||
{"translationFor", "translation_for"},
|
||||
{"linkedPostIds", "linked_post_ids"}
|
||||
]
|
||||
|> Enum.reduce(fields, fn {file_key, current_key}, acc ->
|
||||
case Map.fetch(acc, file_key) do
|
||||
{:ok, value} -> Map.put_new(acc, current_key, value)
|
||||
:error -> acc
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
defp linked_post_ids(media_id) do
|
||||
case Repo.query("SELECT post_id FROM post_media WHERE media_id = ? ORDER BY sort_order ASC, post_id ASC", [media_id]) do
|
||||
{:ok, %{rows: rows}} -> Enum.map(rows, fn [post_id] -> post_id end)
|
||||
|
||||
@@ -658,16 +658,16 @@ defmodule BDS.Posts do
|
||||
content: nil,
|
||||
status: parse_post_status(Map.get(fields, "status", "published")),
|
||||
author: Map.get(fields, "author"),
|
||||
created_at: Map.get(fields, "created_at", now),
|
||||
updated_at: Map.get(fields, "updated_at", now),
|
||||
published_at: Map.get(fields, "published_at"),
|
||||
created_at: Map.get(fields, "createdAt", now),
|
||||
updated_at: Map.get(fields, "updatedAt", now),
|
||||
published_at: Map.get(fields, "publishedAt"),
|
||||
file_path: rebuild_file.relative_path,
|
||||
checksum: nil,
|
||||
tags: Map.get(fields, "tags", []),
|
||||
categories: Map.get(fields, "categories", []),
|
||||
template_slug: Map.get(fields, "template_slug"),
|
||||
template_slug: Map.get(fields, "templateSlug"),
|
||||
language: Map.get(fields, "language"),
|
||||
do_not_translate: Map.get(fields, "do_not_translate", false),
|
||||
do_not_translate: Map.get(fields, "doNotTranslate", false),
|
||||
published_title: nil,
|
||||
published_content: nil,
|
||||
published_tags: nil,
|
||||
@@ -686,7 +686,7 @@ defmodule BDS.Posts do
|
||||
|
||||
defp upsert_post_translation_from_rebuild_file(project_id, rebuild_file) do
|
||||
fields = rebuild_file.fields
|
||||
source_post_id = Map.fetch!(fields, "translation_for")
|
||||
source_post_id = Map.fetch!(fields, "translationFor")
|
||||
source_post = Repo.get!(Post, source_post_id)
|
||||
now = Persistence.now_ms()
|
||||
language = normalize_language(Map.fetch!(fields, "language"))
|
||||
@@ -703,9 +703,9 @@ defmodule BDS.Posts do
|
||||
excerpt: Map.get(fields, "excerpt"),
|
||||
content: nil,
|
||||
status: parse_translation_status(Map.get(fields, "status", "published")),
|
||||
created_at: Map.get(fields, "created_at", source_post.created_at || now),
|
||||
updated_at: Map.get(fields, "updated_at", source_post.updated_at || source_post.created_at || now),
|
||||
published_at: Map.get(fields, "published_at", source_post.published_at),
|
||||
created_at: Map.get(fields, "createdAt", source_post.created_at || now),
|
||||
updated_at: Map.get(fields, "updatedAt", source_post.updated_at || source_post.created_at || now),
|
||||
published_at: Map.get(fields, "publishedAt", source_post.published_at),
|
||||
file_path: rebuild_file.relative_path,
|
||||
checksum: nil
|
||||
}
|
||||
@@ -731,38 +731,14 @@ defmodule BDS.Posts do
|
||||
%{
|
||||
path: path,
|
||||
relative_path: Path.relative_to(path, Projects.project_data_dir(project)),
|
||||
fields: normalize_rebuild_fields(fields)
|
||||
fields: fields
|
||||
}
|
||||
end
|
||||
|
||||
defp translation_rebuild_file?(%{fields: fields}) do
|
||||
Map.has_key?(fields, "translation_for") and not Map.has_key?(fields, "slug")
|
||||
Map.has_key?(fields, "translationFor") and not Map.has_key?(fields, "slug")
|
||||
end
|
||||
|
||||
defp normalize_rebuild_fields(fields) when is_map(fields) do
|
||||
[
|
||||
{"translationFor", "translation_for"},
|
||||
{"doNotTranslate", "do_not_translate"},
|
||||
{"templateSlug", "template_slug"},
|
||||
{"createdAt", "created_at"},
|
||||
{"updatedAt", "updated_at"},
|
||||
{"publishedAt", "published_at"}
|
||||
]
|
||||
|> Enum.reduce(fields, fn {file_key, current_key}, acc ->
|
||||
case Map.fetch(acc, file_key) do
|
||||
{:ok, value} -> Map.put_new(acc, current_key, normalize_rebuild_field_value(current_key, value))
|
||||
:error -> acc
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
defp normalize_rebuild_field_value(key, value)
|
||||
when key in ["created_at", "updated_at", "published_at"] do
|
||||
Persistence.parse_timestamp(value) || value
|
||||
end
|
||||
|
||||
defp normalize_rebuild_field_value(_key, value), do: value
|
||||
|
||||
defp list_matching_files(dir, pattern) do
|
||||
if File.dir?(dir) do
|
||||
Path.join([dir, "**", pattern])
|
||||
|
||||
@@ -204,7 +204,6 @@ defmodule BDS.Scripts do
|
||||
defp upsert_script_from_file(project_id, project, path) do
|
||||
contents = File.read!(path)
|
||||
{:ok, %{fields: fields}} = Frontmatter.parse_document(contents)
|
||||
fields = normalize_script_fields(fields)
|
||||
relative_path = Path.relative_to(path, Projects.project_data_dir(project))
|
||||
now = Persistence.now_ms()
|
||||
|
||||
@@ -220,8 +219,8 @@ defmodule BDS.Scripts do
|
||||
file_path: relative_path,
|
||||
status: :published,
|
||||
content: nil,
|
||||
created_at: Map.get(fields, "created_at", now),
|
||||
updated_at: Map.get(fields, "updated_at", now)
|
||||
created_at: Map.get(fields, "createdAt", now),
|
||||
updated_at: Map.get(fields, "updatedAt", now)
|
||||
}
|
||||
|
||||
script = Repo.get_by(Script, project_id: project_id, slug: attrs.slug) || %Script{}
|
||||
@@ -236,20 +235,6 @@ defmodule BDS.Scripts do
|
||||
defp parse_script_kind("utility"), do: :utility
|
||||
defp parse_script_kind("transform"), do: :transform
|
||||
|
||||
defp normalize_script_fields(fields) when is_map(fields) do
|
||||
[
|
||||
{"createdAt", "created_at"},
|
||||
{"updatedAt", "updated_at"},
|
||||
{"projectId", "project_id"}
|
||||
]
|
||||
|> Enum.reduce(fields, fn {file_key, current_key}, acc ->
|
||||
case Map.fetch(acc, file_key) do
|
||||
{:ok, value} -> Map.put_new(acc, current_key, value)
|
||||
:error -> acc
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
defp list_matching_files(dir, pattern) do
|
||||
if File.dir?(dir) do
|
||||
Path.join(dir, pattern)
|
||||
|
||||
@@ -343,7 +343,6 @@ defmodule BDS.Templates do
|
||||
defp upsert_template_from_file(project_id, project, path) do
|
||||
contents = File.read!(path)
|
||||
{:ok, %{fields: fields}} = Frontmatter.parse_document(contents)
|
||||
fields = normalize_template_fields(fields)
|
||||
relative_path = Path.relative_to(path, Projects.project_data_dir(project))
|
||||
now = Persistence.now_ms()
|
||||
|
||||
@@ -358,8 +357,8 @@ defmodule BDS.Templates do
|
||||
file_path: relative_path,
|
||||
status: :published,
|
||||
content: nil,
|
||||
created_at: Map.get(fields, "created_at", now),
|
||||
updated_at: Map.get(fields, "updated_at", now)
|
||||
created_at: Map.get(fields, "createdAt", now),
|
||||
updated_at: Map.get(fields, "updatedAt", now)
|
||||
}
|
||||
|
||||
template = Repo.get_by(Template, project_id: project_id, slug: attrs.slug) || %Template{}
|
||||
@@ -375,20 +374,6 @@ defmodule BDS.Templates do
|
||||
defp parse_template_kind("not_found"), do: :not_found
|
||||
defp parse_template_kind("partial"), do: :partial
|
||||
|
||||
defp normalize_template_fields(fields) when is_map(fields) do
|
||||
[
|
||||
{"createdAt", "created_at"},
|
||||
{"updatedAt", "updated_at"},
|
||||
{"projectId", "project_id"}
|
||||
]
|
||||
|> Enum.reduce(fields, fn {file_key, current_key}, acc ->
|
||||
case Map.fetch(acc, file_key) do
|
||||
{:ok, value} -> Map.put_new(acc, current_key, value)
|
||||
:error -> acc
|
||||
end
|
||||
end)
|
||||
end
|
||||
|
||||
defp list_matching_files(dir, pattern) do
|
||||
if File.dir?(dir) do
|
||||
Path.join(dir, pattern)
|
||||
|
||||
Reference in New Issue
Block a user