v1.0.174: /api/sync — БД = зеркало таблицы, удаление ВСЕГО кроме keep_ids

This commit is contained in:
2026-06-24 15:11:57 +04:00
parent b19e6ba06e
commit 70a7c8bfb4
3 changed files with 29 additions and 31 deletions
+8 -10
View File
@@ -78,8 +78,8 @@ 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()
elif self.path == "/api/sync":
self._handle_api_sync()
else:
self.send_error(404)
@@ -160,19 +160,15 @@ class Handler(BaseHTTPRequestHandler):
execute("DELETE FROM documents WHERE id = %s", (doc_id,))
self._json({"ok": True})
# ── POST /api/sync-batch ────────────────────────────────────────────
# ── POST /api/sync ──────────────────────────────────────────────────
def _handle_api_sync_batch(self):
"""Удалить все документы батча, НЕ входящие в keep_ids."""
def _handle_api_sync(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,))
docs = query("SELECT id FROM documents", ())
deleted = 0
for d in (docs or []):
if d["id"] in keep_ids:
@@ -184,6 +180,8 @@ class Handler(BaseHTTPRequestHandler):
execute("DELETE FROM supplements WHERE id = %s", (s["id"],))
execute("DELETE FROM documents WHERE id = %s", (d["id"],))
deleted += 1
# Удалить осиротевшие contracts (без supplements)
execute("DELETE FROM contracts WHERE id NOT IN (SELECT DISTINCT contract_id FROM supplements)")
self._json({"ok": True, "deleted": deleted})
# ── /api/groups ?batch=X ─────────────────────────────────────────────