v1.0.174: sync-batch — удаление мусора после загрузки, DELETE /api/documents/<id>
This commit is contained in:
@@ -78,6 +78,15 @@ class Handler(BaseHTTPRequestHandler):
|
||||
self._handle_api_prompts_activate()
|
||||
elif self.path == "/api/prompts/delete":
|
||||
self._handle_api_prompts_delete()
|
||||
elif self.path == "/api/sync-batch":
|
||||
self._handle_api_sync_batch()
|
||||
else:
|
||||
self.send_error(404)
|
||||
|
||||
def do_DELETE(self):
|
||||
parsed = urlparse(self.path)
|
||||
if parsed.path.startswith("/api/documents/"):
|
||||
self._handle_api_document_delete(parsed)
|
||||
else:
|
||||
self.send_error(404)
|
||||
|
||||
@@ -139,6 +148,44 @@ class Handler(BaseHTTPRequestHandler):
|
||||
"elements_json": doc.get("elements_json"),
|
||||
})
|
||||
|
||||
def _handle_api_document_delete(self, parsed):
|
||||
"""DELETE /api/documents/<id> — cascade: spec_current, spec_events, supplements, document."""
|
||||
from db.connection import execute, query
|
||||
doc_id = parsed.path.split("/")[-1]
|
||||
supps = query("SELECT id, contract_id FROM supplements WHERE document_id = %s", (doc_id,))
|
||||
for s in (supps or []):
|
||||
execute("DELETE FROM spec_current WHERE contract_id = %s", (s["contract_id"],))
|
||||
execute("DELETE FROM spec_events WHERE supplement_id = %s", (s["id"],))
|
||||
execute("DELETE FROM supplements WHERE id = %s", (s["id"],))
|
||||
execute("DELETE FROM documents WHERE id = %s", (doc_id,))
|
||||
self._json({"ok": True})
|
||||
|
||||
# ── POST /api/sync-batch ────────────────────────────────────────────
|
||||
|
||||
def _handle_api_sync_batch(self):
|
||||
"""Удалить все документы батча, НЕ входящие в keep_ids."""
|
||||
from db.connection import execute, query
|
||||
length = int(self.headers.get("Content-Length", 0))
|
||||
body = json.loads(self.rfile.read(length)) if length > 0 else {}
|
||||
batch_id = body.get("batch_id", "")
|
||||
keep_ids = set(body.get("keep_ids", []))
|
||||
if not batch_id:
|
||||
self._json({"ok": False, "error": "batch_id required"}, 400)
|
||||
return
|
||||
docs = query("SELECT id FROM documents WHERE batch_id = %s", (batch_id,))
|
||||
deleted = 0
|
||||
for d in (docs or []):
|
||||
if d["id"] in keep_ids:
|
||||
continue
|
||||
supps = query("SELECT id, contract_id FROM supplements WHERE document_id = %s", (d["id"],))
|
||||
for s in (supps or []):
|
||||
execute("DELETE FROM spec_current WHERE contract_id = %s", (s["contract_id"],))
|
||||
execute("DELETE FROM spec_events WHERE supplement_id = %s", (s["id"],))
|
||||
execute("DELETE FROM supplements WHERE id = %s", (s["id"],))
|
||||
execute("DELETE FROM documents WHERE id = %s", (d["id"],))
|
||||
deleted += 1
|
||||
self._json({"ok": True, "deleted": deleted})
|
||||
|
||||
# ── /api/groups ?batch=X ─────────────────────────────────────────────
|
||||
|
||||
def _handle_api_groups(self, parsed):
|
||||
|
||||
Reference in New Issue
Block a user