99 lines
3.0 KiB
Python

from fastapi import APIRouter, Depends, Query
from sqlalchemy.orm import Session
from app.core.database import get_db
from app.dependencies.auth import get_current_admin
from app.models.user import User
from app.schemas.admin import (
DashboardSummary,
OrdersPerStatus,
SalesOverTime,
SalesSummary,
TimePeriod,
TopCategorySales,
TopCustomerSales,
TopProductSales,
)
from app.services.admin import AdminDashboardService
router = APIRouter()
@router.get("/dashboard", response_model=DashboardSummary)
async def get_dashboard_summary(
db: Session = Depends(get_db),
current_user: User = Depends(get_current_admin)
):
"""
Get a summary of key metrics for the admin dashboard.
"""
return AdminDashboardService.get_dashboard_summary(db)
@router.get("/sales/summary", response_model=SalesSummary)
async def get_sales_summary(
period: TimePeriod = TimePeriod.LAST_30_DAYS,
db: Session = Depends(get_db),
current_user: User = Depends(get_current_admin)
):
"""
Get sales summary for a specific time period.
"""
return AdminDashboardService.get_sales_summary(db, period)
@router.get("/sales/over-time", response_model=SalesOverTime)
async def get_sales_over_time(
period: TimePeriod = TimePeriod.LAST_30_DAYS,
db: Session = Depends(get_db),
current_user: User = Depends(get_current_admin)
):
"""
Get sales data over time for a specific period.
"""
return AdminDashboardService.get_sales_over_time(db, period)
@router.get("/sales/top-categories", response_model=TopCategorySales)
async def get_top_categories(
period: TimePeriod = TimePeriod.LAST_30_DAYS,
limit: int = Query(5, ge=1, le=50),
db: Session = Depends(get_db),
current_user: User = Depends(get_current_admin)
):
"""
Get top selling categories for a specific period.
"""
return AdminDashboardService.get_top_categories(db, period, limit)
@router.get("/sales/top-products", response_model=TopProductSales)
async def get_top_products(
period: TimePeriod = TimePeriod.LAST_30_DAYS,
limit: int = Query(5, ge=1, le=50),
db: Session = Depends(get_db),
current_user: User = Depends(get_current_admin)
):
"""
Get top selling products for a specific period.
"""
return AdminDashboardService.get_top_products(db, period, limit)
@router.get("/sales/top-customers", response_model=TopCustomerSales)
async def get_top_customers(
period: TimePeriod = TimePeriod.LAST_30_DAYS,
limit: int = Query(5, ge=1, le=50),
db: Session = Depends(get_db),
current_user: User = Depends(get_current_admin)
):
"""
Get top customers for a specific period.
"""
return AdminDashboardService.get_top_customers(db, period, limit)
@router.get("/orders/by-status", response_model=list[OrdersPerStatus])
async def get_orders_by_status(
db: Session = Depends(get_db),
current_user: User = Depends(get_current_admin)
):
"""
Get order counts by status.
"""
return AdminDashboardService.get_orders_by_status(db)