77 lines
2.6 KiB
Python
77 lines
2.6 KiB
Python
from pydantic import BaseModel, Field
|
|
from typing import Optional
|
|
|
|
|
|
class KeyBase(BaseModel):
|
|
tg_id: int
|
|
client_id: str
|
|
email: Optional[str] = None
|
|
created_at: Optional[int] = None
|
|
expiry_time: int
|
|
key: Optional[str] = None
|
|
server_id: Optional[str] = None
|
|
remnawave_link: Optional[str] = None
|
|
tariff_id: Optional[int] = None
|
|
is_frozen: Optional[bool] = False
|
|
alias: Optional[str] = None
|
|
notified: Optional[bool] = False
|
|
notified_24h: Optional[bool] = False
|
|
|
|
|
|
class KeyResponse(KeyBase):
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class KeyDetailsResponse(BaseModel):
|
|
key: Optional[str]
|
|
remnawave_link: Optional[str]
|
|
server_id: Optional[str]
|
|
created_at: Optional[int]
|
|
expiry_time: Optional[int]
|
|
client_id: str
|
|
tg_id: int
|
|
email: Optional[str]
|
|
is_frozen: bool
|
|
balance: float
|
|
alias: Optional[str]
|
|
expiry_date: str
|
|
days_left_message: str
|
|
link: Optional[str]
|
|
cluster_name: Optional[str]
|
|
location_name: Optional[str]
|
|
tariff_id: Optional[int]
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class KeyUpdate(BaseModel):
|
|
email: Optional[str] = None
|
|
expiry_time: Optional[int] = None
|
|
key: Optional[str] = None
|
|
server_id: Optional[str] = None
|
|
remnawave_link: Optional[str] = None
|
|
tariff_id: Optional[int] = None
|
|
is_frozen: Optional[bool] = None
|
|
alias: Optional[str] = None
|
|
notified: Optional[bool] = None
|
|
notified_24h: Optional[bool] = None
|
|
|
|
class Config:
|
|
from_attributes = True
|
|
|
|
|
|
class KeyCreateRequest(BaseModel):
|
|
tg_id: int = Field(..., description="Telegram ID пользователя")
|
|
cluster_id: str = Field(..., description="Имя кластера или сервера")
|
|
tariff_id: int = Field(..., description="ID тарифа из базы данных")
|
|
client_id: str = Field(..., description="UUID клиента (уникальный)")
|
|
expiry_timestamp: int = Field(..., description="Срок окончания в миллисекундах")
|
|
|
|
email: Optional[str] = Field(None, description="Условное имя подписки")
|
|
alias: Optional[str] = Field(None, description="пользовательское имя")
|
|
remnawave_link: Optional[str] = Field(None, description="Ссылка на подписку Remnawave")
|
|
hwid_limit: Optional[int] = Field(None, description="Ограничение по HWID")
|
|
traffic_limit_bytes: Optional[int] = Field(None, description="Ограничение трафика в байтах")
|
|
is_trial: Optional[bool] = Field(False, description="Флаг триального ключа") |