fix: worked on CSM-003
This commit is contained in:
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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} ->
|
||||
|
||||
@@ -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
|
||||
|
||||
|
||||
@@ -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
|
||||
|
||||
@@ -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
|
||||
|
||||
Reference in New Issue
Block a user