feat: add blocker resolution action to panel

This commit is contained in:
gti
2026-09-22 15:38:55 -03:00
parent 301aac112e
commit 66b5888d80
2 changed files with 20 additions and 2 deletions
+19 -1
View File
@@ -109,7 +109,25 @@ def router(session_factory):
def blockers(request: Request, page: int = 1, blocker_type: str | None = None):
session, auth_data, redirect = page_auth(request)
if redirect: return redirect
try: return render(request, "blockers.html", {"result": list_blockers(session, page=page, page_size=50, blocker_type=blocker_type), "auth": auth_data})
try: return render(request, "blockers.html", {"result": list_blockers(session, page=page, page_size=50, blocker_type=blocker_type), "auth": auth_data, "csrf_token": request.cookies.get("gti_csrf", "")})
finally: session.close()
@routes.post("/blockers/{blocker_id}/resolve")
async def resolve_blocker(request: Request, blocker_id: int):
session, auth_data, redirect = page_auth(request)
if redirect: return redirect
try:
values = await form_values(request); web_session, admin = auth_data
require_csrf(web_session, values.get("csrf_token"))
if values.get("confirm") != "yes" or not values.get("context", "").strip(): return HTMLResponse("confirmation and context required", status_code=400)
from .models import BlockedProduct
blocker = session.get(BlockedProduct, blocker_id)
if not blocker: return HTMLResponse("Blocker not found", status_code=404)
from datetime import datetime, timezone
blocker.resolved_at = datetime.now(timezone.utc); blocker.resolution_source = "HUMAN_PANEL"
record_audit(session, admin_user_id=admin.id, tenant_id=blocker.tenant_id, action="RESOLVE_BLOCKER", target_type="blocker", target_id=str(blocker_id), context={"context": values["context"]})
session.commit()
return RedirectResponse("/blockers", status_code=303)
finally: session.close()
@routes.get("/jobs", response_class=HTMLResponse)