forked from HSE_team/BetterCallPraskovia
97 lines
2.5 KiB
Python
97 lines
2.5 KiB
Python
"""
|
||
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
|
||
|