from pathlib import Path from fastapi import APIRouter, Query, Request from fastapi.responses import HTMLResponse, RedirectResponse from fastapi.templating import Jinja2Templates from app.service.recon_service import list_transactions router = APIRouter() project_root = Path(__file__).resolve().parents[2] templates = Jinja2Templates(directory=str(project_root / "data" / "templates")) @router.get("/", response_model=None, include_in_schema=False) async def dashboard( request: Request, recon_job_name: str | None = Query(default=None), as_at_date: str | None = Query(default=None), ) -> HTMLResponse | RedirectResponse: user = request.session.get("user") # if not user: # return RedirectResponse(url="/login", status_code=302) transactions = list_transactions() if as_at_date: transactions = [ item for item in transactions if item.date.isoformat() == as_at_date ] results = [ { "Txn ID": item.transaction_id, "Date": item.date.isoformat(), "Ref ID": item.reference_id, "Account": item.account, "Counterparty": item.counterparty, "Amount": f"{item.amount:,.2f}", "CCY": item.currency, "Booking": item.booking_date.isoformat(), "Settlement": item.settlement_date.isoformat(), "Description": item.description, "Status": item.status, "Flag": item.flag, } for item in transactions ] return templates.TemplateResponse( request=request, name="dashboard.html", context={ "request": request, "title": "Recon Ranger Dashboard", "results": results, "user": user, "recon_job_name": recon_job_name, "as_at_date": as_at_date, "prev_cursor": None, "next_cursor": None, }, )