import re from decimal import Decimal from datetime import datetime from typing import List, Optional from pydantic import BaseModel, ConfigDict, EmailStr, Field, field_validator class StatsResponse(BaseModel): total_products: int unique_brands: int unique_categories: int unique_marketplaces: int = 0 unique_vendors: int = 0 total_inventory_entries: int = 0 total_inventory_quantity: int = 0 class MarketplaceStatsResponse(BaseModel): marketplace: str total_products: int unique_vendors: int unique_brands: int # ============================================================================ # Customer Statistics # ============================================================================ class CustomerStatsResponse(BaseModel): """Schema for customer statistics.""" customer_id: int total_orders: int total_spent: Decimal average_order_value: Decimal last_order_date: Optional[datetime] first_order_date: Optional[datetime] lifetime_value: Decimal # ============================================================================ # Order Statistics # ============================================================================ class OrderStatsResponse(BaseModel): """Schema for order statistics.""" total_orders: int pending_orders: int processing_orders: int shipped_orders: int delivered_orders: int cancelled_orders: int total_revenue: Decimal average_order_value: Decimal # ============================================================================ # Vendor Statistics # ============================================================================ class VendorStatsResponse(BaseModel): """Vendor statistics response schema.""" total: int = Field(..., description="Total number of vendors") verified: int = Field(..., description="Number of verified vendors") pending: int = Field(..., description="Number of pending verification vendors") inactive: int = Field(..., description="Number of inactive vendors")