from __future__ import annotations from http import HTTPStatus from typing import Any from services.post_ops import ( run_delete_issue, run_history_append, run_history_clear, run_mark_issue, run_output_clear, run_suppress_skipped, run_update_issue, ) from services.workflows import ( run_correction_apply_api, run_generate_api, run_parse_api, ) def _read_payload(handler: Any) -> dict[str, Any] | None: try: payload = handler._read_json_body() except ValueError as exc: handler._send_json({"ok": False, "error": str(exc)}, HTTPStatus.BAD_REQUEST) return None if not isinstance(payload, dict): handler._send_json({"ok": False, "error": "invalid JSON body"}, HTTPStatus.BAD_REQUEST) return None return payload def handle_post_routes(handler: Any, parsed: Any, ctx: dict[str, Any]) -> bool: if parsed.path == "/api/parse": payload = _read_payload(handler) if payload is None: return True status, body = run_parse_api(payload, ctx) handler._send_json(body, status) return True if parsed.path == "/api/generate": payload = _read_payload(handler) if payload is None: return True status, body = run_generate_api(payload, ctx) handler._send_json(body, status) return True if parsed.path == "/api/correction/apply": payload = _read_payload(handler) if payload is None: return True status, body = run_correction_apply_api(payload, ctx) handler._send_json(body, status) return True if parsed.path == "/api/log/mark": payload = _read_payload(handler) if payload is None: return True status, body = run_mark_issue(payload, ctx) handler._send_json(body, status) return True if parsed.path == "/api/skipped/suppress": payload = _read_payload(handler) if payload is None: return True status, body = run_suppress_skipped(payload, ctx) handler._send_json(body, status) return True if parsed.path == "/api/issues/update": payload = _read_payload(handler) if payload is None: return True status, body = run_update_issue(payload, ctx) handler._send_json(body, status) return True if parsed.path == "/api/issues/delete": payload = _read_payload(handler) if payload is None: return True status, body = run_delete_issue(payload, ctx) handler._send_json(body, status) return True if parsed.path == "/api/output/clear": payload = _read_payload(handler) if payload is None: return True status, body = run_output_clear(ctx) handler._send_json(body, status) return True if parsed.path == "/api/history/append": payload = _read_payload(handler) if payload is None: return True status, body = run_history_append(payload, ctx) handler._send_json(body, status) return True if parsed.path == "/api/history/clear": payload = _read_payload(handler) if payload is None: return True status, body = run_history_clear(ctx) handler._send_json(body, status) return True return False