Files
Birthday-Pool-Bot/birthday_pool_bot/dto.py

77 lines
1.7 KiB
Python

import enum
import uuid
from datetime import date
from typing import Annotated
from pydantic import BaseModel, Field
from pydantic_extra_types.phone_numbers import PhoneNumberValidator
from pydantic_filters import BaseFilter
PhoneNumber = Annotated[str, PhoneNumberValidator(number_format="E164")]
class BankEnum(enum.Enum):
T_BANK = "t-bank"
SBER = "sber"
ALFA_BANK = "alfa-bank"
class PaymentData(BaseModel):
phone: PhoneNumber
bank: BankEnum
class User(BaseModel):
id: uuid.UUID = Field(default_factory=uuid.uuid4)
name: str | None = None
birthday: date | None = None
gift_payment_data: PaymentData | None = None
phone: PhoneNumber | None = None
telegram_id: int | None = None
class UserFilter(BaseFilter):
id: set[uuid.UUID]
id__gt: uuid.UUID
phone: set[PhoneNumber]
telegram_id: set[int]
class Pool(BaseModel):
id: uuid.UUID = Field(default_factory=uuid.uuid4)
owner_id: uuid.UUID
birthday_user_id: uuid.UUID
description: str | None = None
payment_data: PaymentData
owner: User | None = None
birthday_user: User | None = None
class PoolFilter(BaseFilter):
id: set[uuid.UUID]
id__gt: uuid.UUID
owner_id: set[uuid.UUID]
birthday_user_id: set[uuid.UUID]
class Subscription(BaseModel):
from_user_id: uuid.UUID
to_user_id: uuid.UUID
name: str
pool_id: uuid.UUID | None = None
from_user: User | None = None
to_user: User | None = None
pool: Pool | None = None
class SubscriptionFilter(BaseFilter):
from_user_id: set[uuid.UUID]
from_user_id__gt: uuid.UUID
to_user_id: set[uuid.UUID]
to_user_id__gt: uuid.UUID
pool_id: set[uuid.UUID]
pool_id__null: bool