77 lines
1.7 KiB
Python
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
|