99 lines
3.0 KiB
Python
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)
|