49 lines
1.4 KiB
Python
49 lines
1.4 KiB
Python
from pydantic import BaseModel
|
|
from typing import Optional, List
|
|
from datetime import datetime
|
|
|
|
class PurchaseBonus(BaseModel):
|
|
username: str
|
|
bonus_type_id: str
|
|
|
|
class BonusEffect(BaseModel):
|
|
effect_type: str
|
|
effect_value: float
|
|
expires_at: Optional[datetime] = None
|
|
|
|
class BonusType(BaseModel):
|
|
id: str
|
|
name: str
|
|
description: str
|
|
effect_type: str # "experience", "strength", "speed", etc.
|
|
base_effect_value: float # Базовое значение эффекта (например, 1.0 для +100%)
|
|
effect_increment: float # Прирост эффекта за уровень (например, 0.1 для +10%)
|
|
price: int # Базовая цена
|
|
upgrade_price: int # Цена улучшения за уровень
|
|
duration: int # Длительность в секундах (0 для бесконечных)
|
|
max_level: int = 0 # 0 = без ограничения уровней
|
|
|
|
class UserTypeBonus(BaseModel):
|
|
id: str
|
|
name: str
|
|
description: str
|
|
effect_type: str
|
|
effect_value: float
|
|
level: int
|
|
purchased_at: datetime
|
|
can_upgrade: bool
|
|
upgrade_price: int
|
|
expires_at: Optional[datetime] = None
|
|
is_active: bool = True
|
|
is_permanent: bool
|
|
|
|
class UserBonus(BaseModel):
|
|
id: str
|
|
user_id: str
|
|
username: str
|
|
bonus_type_id: str
|
|
level: int
|
|
purchased_at: datetime
|
|
expires_at: Optional[datetime] = None
|
|
is_active: bool
|