add promocodes

This commit is contained in:
2025-12-20 19:51:18 +05:00
parent f174761ec6
commit 9954599a33
4 changed files with 261 additions and 1 deletions

33
app/models/promo.py Normal file
View File

@ -0,0 +1,33 @@
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