from __future__ import annotations from datetime import date, datetime from pydantic import BaseModel, ConfigDict, Field from src.application.domain.entities import UserEntity class MeUserPublicResponse(BaseModel): model_config = ConfigDict(from_attributes=False) id: str | None = Field(None, description='Идентификатор пользователя') email: str | None = Field(None, description='Email') first_name: str | None = Field(None, description='Имя') middle_name: str | None = Field(None, description='Отчество') last_name: str | None = Field(None, description='Фамилия') birth_date: date | None = Field(None, description='Дата рождения') encrypted_mnemonic: str | None = Field(None, description='Шифрованная мнемоника') phone: str | None = Field(None, description='Телефон') passport_data: str | None = Field(None, description='Паспортные данные') inn: str | None = Field(None, description='ИНН') erc20: str | None = Field(None, description='ERC-20 адрес') avatar_link: str | None = Field(None, description='HTTPS-ссылка на текущий аватар в хранилище') kyc_verified: bool | None = Field(None, description='Признак пройденного KYC') is_deleted: bool | None = Field(None, description='Удалён ли аккаунт') created_at: datetime | None = Field(None, description='Время создания записи') updated_at: datetime | None = Field(None, description='Время последнего обновления') kyc_verified_at: datetime | None = Field(None, description='Время подтверждения KYC') @classmethod def from_user(cls, user: UserEntity) -> MeUserPublicResponse: return cls( id=user.id, email=user.email, first_name=user.first_name, middle_name=user.middle_name, last_name=user.last_name, birth_date=user.birth_date, encrypted_mnemonic=user.encrypted_mnemonic, phone=user.phone, passport_data=user.passport_data, inn=user.inn, erc20=user.erc20, avatar_link=user.avatar_link, kyc_verified=user.kyc_verified, is_deleted=user.is_deleted, created_at=user.created_at, updated_at=user.updated_at, kyc_verified_at=user.kyc_verified_at, ) class SetAvatarPublicResponse(MeUserPublicResponse): webp_size_bytes: int = Field( ..., ge=0, description='Размер сохранённого файла аватара в формате WebP, байты', )