v1.0.169: prompts CRUD via VM API — /api/prompts, no more prompt.cfm dependency
This commit is contained in:
@@ -48,6 +48,10 @@ class Handler(BaseHTTPRequestHandler):
|
||||
self._handle_api_groups(parsed)
|
||||
elif parsed.path == "/api/batch-progress":
|
||||
self._handle_api_batch_progress(parsed)
|
||||
elif parsed.path == "/api/prompts":
|
||||
self._handle_api_prompts_get(parsed)
|
||||
elif parsed.path == "/api/prompts/list":
|
||||
self._handle_api_prompts_list(parsed)
|
||||
elif parsed.path.startswith("/api/documents/"):
|
||||
self._handle_api_document(parsed)
|
||||
else:
|
||||
@@ -68,6 +72,12 @@ class Handler(BaseHTTPRequestHandler):
|
||||
self._handle_apply_groups()
|
||||
elif self.path == "/api/cleanup":
|
||||
self._handle_cleanup()
|
||||
elif self.path == "/api/prompts/save":
|
||||
self._handle_api_prompts_save()
|
||||
elif self.path == "/api/prompts/activate":
|
||||
self._handle_api_prompts_activate()
|
||||
elif self.path == "/api/prompts/delete":
|
||||
self._handle_api_prompts_delete()
|
||||
else:
|
||||
self.send_error(404)
|
||||
|
||||
@@ -193,6 +203,83 @@ class Handler(BaseHTTPRequestHandler):
|
||||
execute("DELETE FROM contracts")
|
||||
self._json({"ok": True, "message": "all data cleaned"})
|
||||
|
||||
# ── GET /api/cleanup ───────────────────────────────────────────────────
|
||||
|
||||
def _handle_cleanup(self):
|
||||
"""Полная очистка всех данных (кроме prompts)."""
|
||||
from db.connection import execute
|
||||
execute("DELETE FROM spec_current")
|
||||
execute("DELETE FROM spec_events")
|
||||
execute("DELETE FROM supplements")
|
||||
execute("DELETE FROM upload_chunks")
|
||||
execute("DELETE FROM documents")
|
||||
execute("DELETE FROM contracts")
|
||||
self._json({"ok": True, "message": "all data cleaned"})
|
||||
|
||||
# ── Prompts CRUD ──────────────────────────────────────────────────────
|
||||
|
||||
def _handle_api_prompts_get(self, parsed):
|
||||
from db import prompts as db_p
|
||||
params = parse_qs(parsed.query)
|
||||
role = params.get("role", [None])[0]
|
||||
if not role:
|
||||
self._json({"ok": False, "error": "role required"}, 400)
|
||||
return
|
||||
p = db_p.get_active(role)
|
||||
if p:
|
||||
self._json({"ok": True, "id": p["id"], "role": p["role"], "name": p["name"],
|
||||
"body": p["body"], "is_active": p["is_active"], "notes": p.get("notes"),
|
||||
"created_at": str(p.get("created_at", ""))})
|
||||
else:
|
||||
self._json({"ok": False, "error": "not found"}, 404)
|
||||
|
||||
def _handle_api_prompts_list(self, parsed):
|
||||
from db import prompts as db_p
|
||||
params = parse_qs(parsed.query)
|
||||
role = params.get("role", [None])[0]
|
||||
if not role:
|
||||
self._json({"ok": False, "error": "role required"}, 400)
|
||||
return
|
||||
versions = db_p.list_by_role(role)
|
||||
self._json({"ok": True, "versions": versions})
|
||||
|
||||
def _handle_api_prompts_save(self):
|
||||
from db import prompts as db_p
|
||||
length = int(self.headers.get("Content-Length", 0))
|
||||
body = json.loads(self.rfile.read(length))
|
||||
role = body.get("role", "")
|
||||
name = body.get("name", "v" + __import__("datetime").datetime.now().isoformat()[:16])
|
||||
prompt_body = body.get("body", "")
|
||||
notes = body.get("notes", "")
|
||||
is_active = body.get("is_active", True)
|
||||
if not role or not prompt_body:
|
||||
self._json({"ok": False, "error": "role and body required"}, 400)
|
||||
return
|
||||
p = db_p.save_new_version(role, name, prompt_body, notes, is_active)
|
||||
self._json({"ok": True, "id": p["id"]})
|
||||
|
||||
def _handle_api_prompts_activate(self):
|
||||
from db import prompts as db_p
|
||||
length = int(self.headers.get("Content-Length", 0))
|
||||
body = json.loads(self.rfile.read(length))
|
||||
pid = body.get("id", "")
|
||||
if not pid:
|
||||
self._json({"ok": False, "error": "id required"}, 400)
|
||||
return
|
||||
ok = db_p.activate(pid)
|
||||
self._json({"ok": ok})
|
||||
|
||||
def _handle_api_prompts_delete(self):
|
||||
from db import prompts as db_p
|
||||
length = int(self.headers.get("Content-Length", 0))
|
||||
body = json.loads(self.rfile.read(length))
|
||||
pid = body.get("id", "")
|
||||
if not pid:
|
||||
self._json({"ok": False, "error": "id required"}, 400)
|
||||
return
|
||||
ok = db_p.delete_prompt(pid)
|
||||
self._json({"ok": ok})
|
||||
|
||||
# ── /app.js (static) ───────────────────────────────────────────────────
|
||||
|
||||
def _handle_app_js(self):
|
||||
|
||||
Reference in New Issue
Block a user