about summary refs log tree commit diff
path: root/uploader/publications/models.py
diff options
context:
space:
mode:
authorFrederick Muriuki Muriithi2025-10-13 13:13:02 -0500
committerFrederick Muriuki Muriithi2025-10-13 13:13:58 -0500
commitf2d21da16508d1859d0e2aeac63ccb5709540aab (patch)
tree516751554c970da86d5a8f2a8aadcdb93b8e3b31 /uploader/publications/models.py
parenteecc17d9c7b79a31eed40ed72df9dc06eec9056d (diff)
downloadgn-uploader-f2d21da16508d1859d0e2aeac63ccb5709540aab.tar.gz
Publications: Enable deletion of unlinked publications.
Diffstat (limited to 'uploader/publications/models.py')
-rw-r--r--uploader/publications/models.py21
1 files changed, 21 insertions, 0 deletions
diff --git a/uploader/publications/models.py b/uploader/publications/models.py
index f83be58..ba8f026 100644
--- a/uploader/publications/models.py
+++ b/uploader/publications/models.py
@@ -71,6 +71,27 @@ def update_publications(conn: Connection , publications: tuple[dict, ...]) -> tu
     return tuple()
 
 
+def delete_publications(conn: Connection , publications: tuple[dict, ...]):
+    """Delete multiple publications"""
+    publications = tuple(pub for pub in publications if bool(pub))
+    if len(publications) > 0:
+        _pub_ids = tuple(pub["Id"] for pub in publications)
+        _paramstr = ", ".join(["%s"] * len(_pub_ids))
+        _phenos_query = (
+            "SELECT PublicationId, COUNT(PhenotypeId) FROM PublishXRef "
+            f"WHERE PublicationId IN ({_paramstr}) GROUP BY PublicationId;")
+
+        with conn.cursor(cursorclass=DictCursor) as cursor:
+            cursor.execute(_phenos_query, _pub_ids)
+            _linked_phenos = cursor.fetchall()
+            if len(_linked_phenos) > 0:
+                raise Exception(
+                    "Cannot delete publications with linked phenotypes.")
+
+            cursor.execute(
+                f"DELETE FROM Publication WHERE Id IN ({_paramstr})", _pub_ids)
+
+
 def fetch_publication_by_id(conn: Connection, publication_id: int) -> dict:
     """Fetch a specific publication from the database."""
     with conn.cursor(cursorclass=DictCursor) as cursor: