dingdanquanliucheng/backend/app/api/reports.py
2026-05-26 11:36:57 +08:00

62 lines
2.2 KiB
Python

from fastapi import APIRouter, Depends, Query
from sqlalchemy.orm import Session
from backend.app.api.deps import require_permissions, require_roles
from backend.app.db import get_db_session
from backend.app.schemas.common import success_payload
from backend.app.services.report_service import report_service
router = APIRouter(prefix="/api/reports", tags=["reports"])
@router.get("/performance")
def performance_report(
stat_type: str = Query(default="month"),
start_date: str | None = Query(default=None),
end_date: str | None = Query(default=None),
category_id: int | None = Query(default=None, gt=0),
exclude_ecommerce: bool = Query(default=False),
session: Session = Depends(get_db_session),
current_user: dict = Depends(require_roles("manager", "admin")),
_permission_user: dict = Depends(require_permissions("report:performance:view")),
) -> dict:
return success_payload(
report_service.performance_report(
{
"stat_type": stat_type,
"start_date": start_date,
"end_date": end_date,
"category_id": category_id,
"exclude_ecommerce": exclude_ecommerce,
},
session,
)
)
@router.get("/performance/export")
def export_performance_report(
stat_type: str = Query(default="month"),
start_date: str | None = Query(default=None),
end_date: str | None = Query(default=None),
category_id: int | None = Query(default=None, gt=0),
exclude_ecommerce: bool = Query(default=False),
export_format: str = Query(default="csv"),
session: Session = Depends(get_db_session),
current_user: dict = Depends(require_roles("manager", "admin")),
_permission_user: dict = Depends(require_permissions("report:performance:export")),
) -> dict:
return success_payload(
report_service.export_performance_report(
{
"stat_type": stat_type,
"start_date": start_date,
"end_date": end_date,
"category_id": category_id,
"exclude_ecommerce": exclude_ecommerce,
"export_format": export_format,
},
session,
)
)