80 lines
1.7 KiB
Python

from datetime import date
from enum import Enum
from pydantic import BaseModel
class TimePeriod(str, Enum):
TODAY = "today"
YESTERDAY = "yesterday"
LAST_7_DAYS = "last_7_days"
LAST_30_DAYS = "last_30_days"
THIS_MONTH = "this_month"
LAST_MONTH = "last_month"
THIS_YEAR = "this_year"
ALL_TIME = "all_time"
class SalesSummary(BaseModel):
period: TimePeriod
total_sales: float
total_orders: int
average_order_value: float
refunded_amount: float
class DateSales(BaseModel):
date: date
total_sales: float
order_count: int
class SalesOverTime(BaseModel):
period: TimePeriod
data: list[DateSales]
total_sales: float
total_orders: int
class CategorySales(BaseModel):
category_id: str
category_name: str
total_sales: float
percentage: float
class TopCategorySales(BaseModel):
period: TimePeriod
categories: list[CategorySales]
total_sales: float
class ProductSales(BaseModel):
product_id: str
product_name: str
quantity_sold: int
total_sales: float
class TopProductSales(BaseModel):
period: TimePeriod
products: list[ProductSales]
total_sales: float
class CustomerSales(BaseModel):
user_id: str
user_name: str
order_count: int
total_spent: float
class TopCustomerSales(BaseModel):
period: TimePeriod
customers: list[CustomerSales]
total_sales: float
class DashboardSummary(BaseModel):
sales_summary: SalesSummary
pending_orders: int
low_stock_products: int
new_customers: int
total_products: int
total_customers: int
class OrdersPerStatus(BaseModel):
status: str
count: int
percentage: float