from pydantic import BaseModel, EmailStr from typing import Optional, List from datetime import datetime from uuid import UUID from decimal import Decimal # Auth Schemas class Token(BaseModel): access_token: str token_type: str class TokenData(BaseModel): user_id: Optional[UUID] = None # User Schemas class UserBase(BaseModel): username: str email: EmailStr name: Optional[str] = None class UserCreate(UserBase): password: str class UserLogin(BaseModel): email: EmailStr password: str class UserUpdate(BaseModel): name: Optional[str] = None avatar_url: Optional[str] = None timezone: Optional[str] = None currency: Optional[str] = None class User(UserBase): id: UUID balance: Decimal role: str status: str created_at: datetime class Config: from_attributes = True # Category Schemas class CategoryBase(BaseModel): name: str slug: str description: Optional[str] = None icon: Optional[str] = None sort_order: int = 0 is_active: bool = True class Category(CategoryBase): id: int class Config: from_attributes = True # Service Schemas class ServiceBase(BaseModel): category_id: int name: str description: Optional[str] = None price_per_1000: Decimal min_quantity: int max_quantity: int average_time: Optional[str] = None status: str = "active" class Service(ServiceBase): id: int class Config: from_attributes = True # Order Schemas class OrderBase(BaseModel): service_id: int link: str quantity: int class OrderCreate(OrderBase): pass class Order(OrderBase): id: int user_id: UUID charge: Decimal status: str start_count: int remains: int created_at: datetime updated_at: datetime class Config: from_attributes = True # Transaction Schemas class TransactionBase(BaseModel): amount: Decimal type: str payment_method: str note: Optional[str] = None class TransactionCreate(TransactionBase): pass class Transaction(TransactionBase): id: UUID user_id: UUID status: str balance_before: Optional[Decimal] = None balance_after: Optional[Decimal] = None created_at: datetime class Config: from_attributes = True # Ticket Schemas class TicketBase(BaseModel): subject: str priority: str = "Normal" order_id: Optional[int] = None class TicketCreate(TicketBase): message: str class Ticket(TicketBase): id: int user_id: UUID status: str created_at: datetime updated_at: datetime class Config: from_attributes = True class TicketMessageBase(BaseModel): message: str class TicketMessageCreate(TicketMessageBase): pass class TicketMessage(TicketMessageBase): id: int ticket_id: int user_id: UUID is_admin: bool created_at: datetime class Config: from_attributes = True