from pydantic import BaseModel, Field from typing import Optional from datetime import datetime class PromoBase(BaseModel): code: str = Field(..., min_length=3, max_length=64) reward_coins: int = Field(..., ge=1, le=1_000_000) max_uses: Optional[int] = Field(default=None, ge=1) # None = бесконечно is_active: bool = True starts_at: Optional[datetime] = None ends_at: Optional[datetime] = None class PromoCreate(PromoBase): pass class PromoUpdate(BaseModel): reward_coins: Optional[int] = Field(default=None, ge=1, le=1_000_000) max_uses: Optional[int] = Field(default=None, ge=1) is_active: Optional[bool] = None starts_at: Optional[datetime] = None ends_at: Optional[datetime] = None class PromoInDB(PromoBase): id: str uses_count: int created_at: datetime updated_at: datetime class PromoRedeemResponse(BaseModel): code: str reward_coins: int new_balance: int