5d60d33db1
Volledige Foodlinkk Command Center uitbreiding met social automatisering, reclamefolder filters, Proxmox monitoring en documentatie.
35 lines
1.1 KiB
Python
35 lines
1.1 KiB
Python
from pathlib import Path
|
|
from typing import Optional
|
|
|
|
from fastapi import APIRouter, Query, Request
|
|
from fastapi.responses import JSONResponse
|
|
from fastapi.templating import Jinja2Templates
|
|
|
|
from app.services.analytics_data import collect_analytics
|
|
|
|
router = APIRouter(prefix="/analytics", tags=["analytics"])
|
|
BASE_DIR = Path(__file__).resolve().parent.parent.parent
|
|
templates = Jinja2Templates(directory=str(BASE_DIR / "templates"))
|
|
|
|
|
|
@router.get("")
|
|
async def analytics_page(request: Request):
|
|
initial = collect_analytics({})
|
|
return templates.TemplateResponse(
|
|
"analytics.html",
|
|
{"request": request, "page_title": "Analytics", "initial_data": initial},
|
|
)
|
|
|
|
|
|
@router.get("/api/data")
|
|
async def analytics_api(
|
|
chain: Optional[str] = None,
|
|
province: Optional[str] = None,
|
|
stage: Optional[str] = None,
|
|
agent: Optional[str] = None,
|
|
days: int = Query(90, ge=7, le=365),
|
|
):
|
|
filters = {"chain": chain, "province": province, "stage": stage, "agent": agent, "days": days}
|
|
filters = {k: v for k, v in filters.items() if v is not None and v != ""}
|
|
return JSONResponse(collect_analytics(filters))
|