feat: add blocker resolution action to panel
This commit is contained in:
+19
-1
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user