57 lines
1.2 KiB
Python
57 lines
1.2 KiB
Python
from datetime import datetime
|
|
from decimal import Decimal
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field
|
|
|
|
|
|
class DevLoginRequest(BaseModel):
|
|
telegram_id: int = Field(default=100001, ge=1)
|
|
username: str | None = "dev_user"
|
|
first_name: str | None = "Traveler"
|
|
|
|
|
|
class TelegramAuthRequest(BaseModel):
|
|
init_data: str
|
|
|
|
|
|
class TokenResponse(BaseModel):
|
|
access_token: str
|
|
token_type: str = "bearer"
|
|
|
|
|
|
class UserResponse(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
id: int
|
|
telegram_id: int | None
|
|
username: str | None
|
|
first_name: str | None
|
|
balance: Decimal
|
|
agreement_accepted: bool
|
|
agreement_accepted_at: datetime | None
|
|
created_at: datetime
|
|
|
|
|
|
class DepositRequest(BaseModel):
|
|
amount: Decimal = Field(..., description="Allowed stub amounts: 100, 500, 1000")
|
|
|
|
|
|
class DepositResponse(BaseModel):
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
id: int
|
|
amount: Decimal
|
|
created_at: datetime
|
|
|
|
|
|
class WalletResponse(BaseModel):
|
|
balance: Decimal
|
|
deposits: list[DepositResponse]
|
|
|
|
|
|
class GameStub(BaseModel):
|
|
slug: str
|
|
title: str
|
|
description: str
|
|
status: str = "coming_soon"
|