# app/api/v1/admin/dashboard.py """ Admin dashboard and statistics endpoints. """ import logging from fastapi import APIRouter, Depends from sqlalchemy.orm import Session from app.api.deps import get_current_admin_api from app.core.database import get_db from app.services.admin_service import admin_service from app.services.stats_service import stats_service from models.database.user import User from app.modules.analytics.schemas import ( AdminDashboardResponse, ImportStatsResponse, MarketplaceStatsResponse, OrderStatsBasicResponse, PlatformStatsResponse, ProductStatsResponse, StatsResponse, UserStatsResponse, VendorStatsResponse, ) router = APIRouter(prefix="/dashboard") logger = logging.getLogger(__name__) @router.get("", response_model=AdminDashboardResponse) def get_admin_dashboard( db: Session = Depends(get_db), current_admin: User = Depends(get_current_admin_api), ): """Get admin dashboard with platform statistics (Admin only).""" user_stats = stats_service.get_user_statistics(db) vendor_stats = stats_service.get_vendor_statistics(db) return AdminDashboardResponse( platform={ "name": "Multi-Tenant Ecommerce Platform", "version": "1.0.0", }, users=UserStatsResponse(**user_stats), vendors=VendorStatsResponse( total=vendor_stats.get("total", vendor_stats.get("total_vendors", 0)), verified=vendor_stats.get( "verified", vendor_stats.get("verified_vendors", 0) ), pending=vendor_stats.get("pending", vendor_stats.get("pending_vendors", 0)), inactive=vendor_stats.get( "inactive", vendor_stats.get("inactive_vendors", 0) ), ), recent_vendors=admin_service.get_recent_vendors(db, limit=5), recent_imports=admin_service.get_recent_import_jobs(db, limit=10), ) @router.get("/stats", response_model=StatsResponse) def get_comprehensive_stats( db: Session = Depends(get_db), current_admin: User = Depends(get_current_admin_api), ): """Get comprehensive platform statistics (Admin only).""" stats_data = stats_service.get_comprehensive_stats(db=db) return StatsResponse( total_products=stats_data["total_products"], unique_brands=stats_data["unique_brands"], unique_categories=stats_data["unique_categories"], unique_marketplaces=stats_data["unique_marketplaces"], unique_vendors=stats_data["unique_vendors"], total_inventory_entries=stats_data["total_inventory_entries"], total_inventory_quantity=stats_data["total_inventory_quantity"], ) @router.get("/stats/marketplace", response_model=list[MarketplaceStatsResponse]) def get_marketplace_stats( db: Session = Depends(get_db), current_admin: User = Depends(get_current_admin_api), ): """Get statistics broken down by marketplace (Admin only).""" marketplace_stats = stats_service.get_marketplace_breakdown_stats(db=db) return [ MarketplaceStatsResponse( marketplace=stat["marketplace"], total_products=stat["total_products"], unique_vendors=stat["unique_vendors"], unique_brands=stat["unique_brands"], ) for stat in marketplace_stats ] @router.get("/stats/platform", response_model=PlatformStatsResponse) def get_platform_statistics( db: Session = Depends(get_db), current_admin: User = Depends(get_current_admin_api), ): """Get comprehensive platform statistics (Admin only).""" user_stats = stats_service.get_user_statistics(db) vendor_stats = stats_service.get_vendor_statistics(db) product_stats = stats_service.get_product_statistics(db) order_stats = stats_service.get_order_statistics(db) import_stats = stats_service.get_import_statistics(db) return PlatformStatsResponse( users=UserStatsResponse(**user_stats), vendors=VendorStatsResponse( total=vendor_stats.get("total", vendor_stats.get("total_vendors", 0)), verified=vendor_stats.get( "verified", vendor_stats.get("verified_vendors", 0) ), pending=vendor_stats.get("pending", vendor_stats.get("pending_vendors", 0)), inactive=vendor_stats.get( "inactive", vendor_stats.get("inactive_vendors", 0) ), ), products=ProductStatsResponse(**product_stats), orders=OrderStatsBasicResponse(**order_stats), imports=ImportStatsResponse(**import_stats), )