v1.0.174: fix FK cascade in delete_by_document — spec_current → spec_events → supplement → document
This commit is contained in:
@@ -28,7 +28,7 @@ def get(supp_id):
|
|||||||
|
|
||||||
|
|
||||||
def delete_by_document(contract_id, filename):
|
def delete_by_document(contract_id, filename):
|
||||||
"""Delete supplement+document by contract+filename."""
|
"""Delete supplement+document by contract+filename (cascade: spec_events first)."""
|
||||||
row = query(
|
row = query(
|
||||||
"""SELECT s.id as sid, s.document_id FROM supplements s
|
"""SELECT s.id as sid, s.document_id FROM supplements s
|
||||||
JOIN documents d ON d.id = s.document_id
|
JOIN documents d ON d.id = s.document_id
|
||||||
@@ -37,7 +37,13 @@ def delete_by_document(contract_id, filename):
|
|||||||
)
|
)
|
||||||
if row:
|
if row:
|
||||||
r = row[0]
|
r = row[0]
|
||||||
|
# 1. Delete spec_current for this contract (FK to spec_events)
|
||||||
|
execute("DELETE FROM spec_current WHERE contract_id = %s", (contract_id,))
|
||||||
|
# 2. Delete spec_events referencing this supplement
|
||||||
|
execute("DELETE FROM spec_events WHERE supplement_id = %s", (r["sid"],))
|
||||||
|
# 3. Delete supplement
|
||||||
execute("DELETE FROM supplements WHERE id = %s", (r["sid"],))
|
execute("DELETE FROM supplements WHERE id = %s", (r["sid"],))
|
||||||
|
# 4. Delete document
|
||||||
execute("DELETE FROM documents WHERE id = %s", (r["document_id"],))
|
execute("DELETE FROM documents WHERE id = %s", (r["document_id"],))
|
||||||
return True
|
return True
|
||||||
return False
|
return False
|
||||||
|
|||||||
Reference in New Issue
Block a user