80 lines
1.7 KiB
Python
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
|