Files

81 lines
2.1 KiB
Python
Raw Permalink Normal View History

from pathlib import Path
from fastapi import APIRouter, Form, Request
from fastapi.responses import RedirectResponse
from fastapi.templating import Jinja2Templates
from app.db import execute, fetch_all
router = APIRouter(prefix="/agents", tags=["agents"])
BASE_DIR = Path(__file__).resolve().parent.parent.parent
templates = Jinja2Templates(directory=str(BASE_DIR / "templates"))
AGENT_STATUSES = [
{"name": "Herman", "role": "CEO Briefing", "color": "cyan"},
{"name": "Sales", "role": "Pipeline", "color": "purple"},
{"name": "Marketing", "role": "Social & Content", "color": "amber"},
{"name": "Ops", "role": "Operations", "color": "green"},
]
@router.get("")
async def agents_page(request: Request):
events: list = []
try:
events = fetch_all(
"""
SELECT id, agent_name, event_type, title, body, status, created_at
FROM agent_events
ORDER BY created_at DESC
LIMIT 100
"""
)
for ev in events:
if ev.get("created_at"):
ev["created_at"] = ev["created_at"].isoformat()
except Exception:
events = []
return templates.TemplateResponse(
"agents.html",
{
"request": request,
"page_title": "Agents",
"agents": AGENT_STATUSES,
"events": events,
},
)
@router.post("/approve/{event_id}")
async def approve_event(event_id: int, next_url: str = Form("/")):
try:
execute(
"""
UPDATE agent_events
SET status = 'approved'
WHERE id = %s
""",
(event_id,),
)
except Exception:
pass
return RedirectResponse(url=next_url, status_code=303)
@router.post("/reject/{event_id}")
async def reject_event(event_id: int, next_url: str = Form("/")):
try:
execute(
"""
UPDATE agent_events
SET status = 'rejected'
WHERE id = %s
""",
(event_id,),
)
except Exception:
pass
return RedirectResponse(url=next_url, status_code=303)