fix: worked on CSM-003

This commit is contained in:
2026-05-07 21:49:59 +02:00
parent 92334256cf
commit 723b8c6433
10 changed files with 132 additions and 56 deletions

View File

@@ -168,22 +168,40 @@ defmodule BDS.Media do
from translation in Translation, where: translation.translation_for == ^media.id
)
delete_file_if_present(media.project_id, media.file_path)
delete_file_if_present(media.project_id, media.sidecar_path)
delete_thumbnail_files(media.project_id, media)
transaction_result =
Repo.transaction(fn ->
Enum.each(translations, fn translation ->
case Repo.delete(translation) do
{:ok, _} -> :ok
{:error, changeset} -> Repo.rollback(changeset)
end
end)
Enum.each(translations, fn translation ->
delete_file_if_present(
media.project_id,
translation_sidecar_path(media, translation.language)
)
case Repo.delete(media) do
{:ok, deleted} -> deleted
{:error, changeset} -> Repo.rollback(changeset)
end
end)
Repo.delete!(translation)
end)
case transaction_result do
{:ok, _deleted_media} ->
delete_file_if_present(media.project_id, media.file_path)
delete_file_if_present(media.project_id, media.sidecar_path)
delete_thumbnail_files(media.project_id, media)
Repo.delete!(media)
:ok = Search.delete_media(media.id)
{:ok, :deleted}
Enum.each(translations, fn translation ->
delete_file_if_present(
media.project_id,
translation_sidecar_path(media, translation.language)
)
end)
Search.delete_media(media.id)
{:ok, :deleted}
{:error, reason} ->
{:error, reason}
end
end
end
@@ -247,7 +265,7 @@ defmodule BDS.Media do
translation ->
project = Projects.get_project!(media.project_id)
case Repo.transaction(fn -> Repo.delete!(translation) end) do
case Repo.delete(translation) do
{:ok, _deleted} ->
delete_file_if_present(
media.project_id,
@@ -258,8 +276,8 @@ defmodule BDS.Media do
:ok = write_sidecar(project, media)
{:ok, true}
{:error, reason} ->
{:error, reason}
{:error, changeset} ->
{:error, changeset}
end
end
end

View File

@@ -294,7 +294,7 @@ defmodule BDS.Posts do
{:ok, Translation.t()} | {:error, :not_found | :unsupported_file | :conflict}
defdelegate import_orphan_post_translation_file(project_id, relative_path), to: RebuildFromFiles
@spec delete_post(String.t()) :: {:ok, :deleted} | {:error, :not_found}
@spec delete_post(String.t()) :: {:ok, :deleted} | {:error, :not_found | Ecto.Changeset.t()}
def delete_post(post_id) do
case Repo.get(Post, post_id) do
nil ->
@@ -309,13 +309,18 @@ defmodule BDS.Posts do
select: pm.media_id
)
delete_post_file(post)
:ok = Embeddings.remove_post(post.id)
:ok = PostLinks.delete_post_links(post.id)
Repo.delete!(post)
Enum.each(linked_media_ids, &sync_deleted_post_media_sidecar/1)
:ok = Search.delete_post(post.id)
{:ok, :deleted}
case Repo.delete(post) do
{:ok, deleted_post} ->
delete_post_file(deleted_post)
Embeddings.remove_post(deleted_post.id)
PostLinks.delete_post_links(deleted_post.id)
Enum.each(linked_media_ids, &sync_deleted_post_media_sidecar/1)
Search.delete_post(deleted_post.id)
{:ok, :deleted}
{:error, changeset} ->
{:error, changeset}
end
end
end

View File

@@ -396,8 +396,10 @@ defmodule BDS.Posts.TranslationValidation do
when is_binary(translation_id) do
case Repo.get(Translation, translation_id) do
%Translation{} = translation ->
Repo.delete!(translation)
{:deleted, translation_for}
case Repo.delete(translation) do
{:ok, _} -> {:deleted, translation_for}
{:error, _} -> :noop
end
nil ->
:noop

View File

@@ -97,10 +97,15 @@ defmodule BDS.Posts.Translations do
{:error, :not_found}
%Translation{} = translation ->
:ok = FileSync.delete_translation_file(translation)
Repo.delete!(translation)
:ok = Search.sync_post(translation.translation_for)
{:ok, :deleted}
case Repo.delete(translation) do
{:ok, deleted_translation} ->
FileSync.delete_translation_file(deleted_translation)
Search.sync_post(deleted_translation.translation_for)
{:ok, :deleted}
{:error, changeset} ->
{:error, changeset}
end
end
end

View File

@@ -187,8 +187,10 @@ defmodule BDS.Projects do
[internal_dir, project_cache_dir(project)] |> Enum.filter(&is_binary/1) |> Enum.uniq()
Repo.transaction(fn ->
Repo.delete!(project)
project
case Repo.delete(project) do
{:ok, deleted} -> deleted
{:error, changeset} -> Repo.rollback(changeset)
end
end)
|> case do
{:ok, deleted_project} ->

View File

@@ -129,9 +129,14 @@ defmodule BDS.Scripts do
{:error, :not_found}
script ->
delete_file_if_present(script.project_id, script.file_path)
Repo.delete!(script)
{:ok, :deleted}
case Repo.delete(script) do
{:ok, deleted_script} ->
delete_file_if_present(deleted_script.project_id, deleted_script.file_path)
{:ok, :deleted}
{:error, changeset} ->
{:error, changeset}
end
end
end

View File

@@ -150,7 +150,11 @@ defmodule BDS.Tags do
update_post_tags(post, updated_tags)
end)
Repo.delete!(tag)
case Repo.delete(tag) do
{:ok, _} -> :ok
{:error, changeset} -> Repo.rollback(changeset)
end
Enum.map(affected_posts, & &1.id)
end)
|> case do
@@ -229,7 +233,12 @@ defmodule BDS.Tags do
update_post_tags(post, updated_tags)
end)
Enum.each(source_tags, &Repo.delete!/1)
Enum.each(source_tags, fn tag ->
case Repo.delete(tag) do
{:ok, _} -> :ok
{:error, changeset} -> Repo.rollback(changeset)
end
end)
Enum.map(affected_posts, & &1.id)
end)
|> case do

View File

@@ -212,9 +212,14 @@ defmodule BDS.Templates do
clear_template_references(template)
end
delete_file_if_present(template.project_id, template.file_path)
Repo.delete!(template)
{:ok, :deleted}
case Repo.delete(template) do
{:ok, deleted_template} ->
delete_file_if_present(deleted_template.project_id, deleted_template.file_path)
{:ok, :deleted}
{:error, changeset} ->
{:error, changeset}
end
end
end
end
@@ -532,7 +537,11 @@ defmodule BDS.Templates do
)
|> Enum.each(fn template ->
clear_template_references(template)
Repo.delete!(template)
case Repo.delete(template) do
{:ok, _} -> :ok
{:error, _} -> :ok
end
end)
:ok