Import ClientFlow production v4928.1.5.132.4

This commit is contained in:
plx
2026-07-29 13:11:01 +00:00
parent 6445044ac6
commit 261d342057
405 changed files with 48373 additions and 1401 deletions

View File

@@ -5,7 +5,7 @@ HTMX table partial so filters and operator actions can refresh the outbox
without replacing the full page.
"""
from fastapi import APIRouter, Request
from fastapi.responses import HTMLResponse
from fastapi.responses import HTMLResponse, PlainTextResponse
import app.admin_dashboard as legacy
from app.admin_dashboard import * # noqa: F401,F403
from app.admin_ui.guidance import outbox_operator_message
@@ -142,6 +142,8 @@ async def outbox_page(
@router.get("/outbox/{outbox_id}", response_class=HTMLResponse)
async def outbox_detail(outbox_id: str):
if not is_uuid_text(outbox_id):
return PlainTextResponse("Identificador de outbox inválido.", status_code=422)
item = get_outbox_item(outbox_id)
if not item:
@@ -194,6 +196,8 @@ async def outbox_detail(outbox_id: str):
@router.post("/outbox/{outbox_id}/retry")
async def outbox_retry(outbox_id: str, request: Request):
if not is_uuid_text(outbox_id):
return PlainTextResponse("Identificador de outbox inválido.", status_code=422)
form = await request.form()
opportunity_id = str(form.get("opportunity_id") or "").strip()
set_outbox_status(outbox_id=outbox_id, status="pending")
@@ -212,6 +216,8 @@ def _outbox_htmx_or_redirect(request: Request, status: str = "all", target_syste
@router.post("/outbox/{outbox_id}/pending")
async def outbox_pending(outbox_id: str, request: Request):
if not is_uuid_text(outbox_id):
return PlainTextResponse("Identificador de outbox inválido.", status_code=422)
set_outbox_status(outbox_id=outbox_id, status="pending")
from app.operator_audit_service import record_operator_action_best_effort
record_operator_action_best_effort(action="outbox_reprocess_requested", entity_type="outbox", entity_id=outbox_id, actor="operator", after={"status": "pending"})
@@ -220,6 +226,8 @@ async def outbox_pending(outbox_id: str, request: Request):
@router.post("/outbox/{outbox_id}/sent")
async def outbox_sent(outbox_id: str, request: Request):
if not is_uuid_text(outbox_id):
return PlainTextResponse("Identificador de outbox inválido.", status_code=422)
set_outbox_status(outbox_id=outbox_id, status="sent")
from app.operator_audit_service import record_operator_action_best_effort
record_operator_action_best_effort(action="outbox_marked_sent", entity_type="outbox", entity_id=outbox_id, actor="operator", after={"status": "sent"})
@@ -228,6 +236,8 @@ async def outbox_sent(outbox_id: str, request: Request):
@router.post("/outbox/{outbox_id}/failed")
async def outbox_failed(outbox_id: str, request: Request):
if not is_uuid_text(outbox_id):
return PlainTextResponse("Identificador de outbox inválido.", status_code=422)
set_outbox_status(outbox_id=outbox_id, status="failed", error="Marcado manualmente como failed.")
from app.operator_audit_service import record_operator_action_best_effort
record_operator_action_best_effort(action="outbox_marked_failed", entity_type="outbox", entity_id=outbox_id, actor="operator", after={"status": "failed"})
@@ -236,6 +246,8 @@ async def outbox_failed(outbox_id: str, request: Request):
@router.post("/outbox/{outbox_id}/ignored")
async def outbox_ignored(outbox_id: str, request: Request):
if not is_uuid_text(outbox_id):
return PlainTextResponse("Identificador de outbox inválido.", status_code=422)
set_outbox_status(outbox_id=outbox_id, status="ignored", error="Ignorado manualmente pelo operador.")
from app.operator_audit_service import record_operator_action_best_effort
record_operator_action_best_effort(action="outbox_ignored", entity_type="outbox", entity_id=outbox_id, actor="operator", after={"status": "ignored"})