""" Pydantic схемы для Collection """ from uuid import UUID from datetime import datetime from pydantic import BaseModel class CollectionBase(BaseModel): """Базовая схема коллекции""" name: str description: str = "" is_public: bool = False class CollectionCreate(CollectionBase): """Схема создания коллекции""" pass class CollectionUpdate(BaseModel): """Схема обновления коллекции""" name: str | None = None description: str | None = None is_public: bool | None = None class CollectionResponse(BaseModel): """Схема ответа с коллекцией""" collection_id: UUID name: str description: str owner_id: UUID is_public: bool created_at: datetime @classmethod def from_entity(cls, collection: "Collection") -> "CollectionResponse": """Создать из доменной сущности""" return cls( collection_id=collection.collection_id, name=collection.name, description=collection.description, owner_id=collection.owner_id, is_public=collection.is_public, created_at=collection.created_at ) class Config: from_attributes = True class CollectionAccessGrant(BaseModel): """Схема предоставления доступа""" user_id: UUID class CollectionAccessResponse(BaseModel): """Схема ответа с доступом""" access_id: UUID user_id: UUID collection_id: UUID created_at: datetime @classmethod def from_entity(cls, access: "CollectionAccess") -> "CollectionAccessResponse": """Создать из доменной сущности""" return cls( access_id=access.access_id, user_id=access.user_id, collection_id=access.collection_id, created_at=access.created_at ) class Config: from_attributes = True class CollectionAccessUserInfo(BaseModel): """Информация о пользователе с доступом""" user_id: UUID telegram_id: str role: str created_at: datetime class CollectionAccessListResponse(BaseModel): """Схема ответа со списком доступа""" access_id: UUID user: CollectionAccessUserInfo collection_id: UUID created_at: datetime class Config: from_attributes = True