import functools from datetime import UTC, datetime from typing import Annotated from beanie import Document, Indexed from pydantic import BaseModel, EmailStr, Field utc_now = functools.partial(datetime.now, UTC) class EmailConfig(BaseModel): email: EmailStr password: str class SmsConfig(BaseModel): user: str api_key: str class CountryConfig(BaseModel): code: Annotated[str, Field(min_length=2, max_length=2)] numbers_count: int | float # Float is for infinity class Config(BaseModel): email: EmailConfig sms: SmsConfig countries: list[CountryConfig] = [] channel: int | None = None class User(Document): user_id: Indexed(int) # type: ignore is_admin: Annotated[bool, Field(False)] config: Annotated[Config | None, Field(None)] created_at: datetime = Field(default_factory=utc_now)