From dad77a888817cfff443aa63ea64b592dfabe0d70 Mon Sep 17 00:00:00 2001
From: mlbonhomme <bonhomme@teklia.com>
Date: Tue, 23 Apr 2024 16:07:17 +0200
Subject: [PATCH] Delete task artifacts before deleting processes in corpus
 delete

---
 arkindex/documents/tasks.py                              | 4 +++-
 arkindex/sql_validation/corpus_delete.sql                | 9 +++++++++
 arkindex/sql_validation/corpus_delete_top_level_type.sql | 9 +++++++++
 3 files changed, 21 insertions(+), 1 deletion(-)

diff --git a/arkindex/documents/tasks.py b/arkindex/documents/tasks.py
index 2dd9855b9b..5c2db2fd9f 100644
--- a/arkindex/documents/tasks.py
+++ b/arkindex/documents/tasks.py
@@ -21,7 +21,7 @@ from arkindex.documents.models import (
     Transcription,
     TranscriptionEntity,
 )
-from arkindex.ponos.models import Task
+from arkindex.ponos.models import Artifact, Task
 from arkindex.process.models import Process, ProcessDatasetSet, ProcessElement, WorkerActivity, WorkerRun
 from arkindex.training.models import DatasetElement, DatasetSet
 from arkindex.users.models import User
@@ -67,6 +67,8 @@ def corpus_delete(corpus_id: str) -> None:
         Selection.objects.filter(element__corpus_id=corpus_id),
         corpus.memberships.all(),
         corpus.exports.all(),
+        # Delete task artifacts
+        Artifact.objects.filter(task__process__corpus_id=corpus_id),
         # ProcessDatasetSet M2M
         ProcessDatasetSet.objects.filter(set__dataset__corpus_id=corpus_id),
         ProcessDatasetSet.objects.filter(process__corpus_id=corpus_id),
diff --git a/arkindex/sql_validation/corpus_delete.sql b/arkindex/sql_validation/corpus_delete.sql
index 2ebb6b6f75..d1abf7227d 100644
--- a/arkindex/sql_validation/corpus_delete.sql
+++ b/arkindex/sql_validation/corpus_delete.sql
@@ -152,6 +152,15 @@ DELETE
 FROM "documents_corpusexport"
 WHERE "documents_corpusexport"."corpus_id" = '{corpus_id}'::uuid;
 
+DELETE
+FROM "ponos_artifact"
+WHERE "ponos_artifact"."id" IN
+        (SELECT U0."id"
+         FROM "ponos_artifact" U0
+         INNER JOIN "ponos_task" U1 ON (U0."task_id" = U1."id")
+         INNER JOIN "process_process" U2 ON (U1."process_id" = U2."id")
+         WHERE U2."corpus_id" = '{corpus_id}'::uuid);
+
 DELETE
 FROM "process_processdatasetset"
 WHERE "process_processdatasetset"."id" IN
diff --git a/arkindex/sql_validation/corpus_delete_top_level_type.sql b/arkindex/sql_validation/corpus_delete_top_level_type.sql
index 80ae4c77e8..2c86ce4af3 100644
--- a/arkindex/sql_validation/corpus_delete_top_level_type.sql
+++ b/arkindex/sql_validation/corpus_delete_top_level_type.sql
@@ -156,6 +156,15 @@ DELETE
 FROM "documents_corpusexport"
 WHERE "documents_corpusexport"."corpus_id" = '{corpus_id}'::uuid;
 
+DELETE
+FROM "ponos_artifact"
+WHERE "ponos_artifact"."id" IN
+        (SELECT U0."id"
+         FROM "ponos_artifact" U0
+         INNER JOIN "ponos_task" U1 ON (U0."task_id" = U1."id")
+         INNER JOIN "process_process" U2 ON (U1."process_id" = U2."id")
+         WHERE U2."corpus_id" = '{corpus_id}'::uuid);
+
 DELETE
 FROM "process_processdatasetset"
 WHERE "process_processdatasetset"."id" IN
-- 
GitLab