from datetime import datetime, UTC from enum import Enum from typing import Optional, Any, List from pydantic import BaseModel, computed_field, Field class AssetType(str, Enum): IMAGE = 'image' PROMPT = 'prompt' class Asset(BaseModel): id: Optional[str] = None name: str type: AssetType linked_char_id: Optional[str] = None data: Optional[bytes] = None tg_doc_file_id: Optional[str] = None tg_photo_file_id: Optional[str] = None thumbnail: Optional[bytes] = None tags: List[str] = [] created_at: datetime = Field(default_factory=lambda: datetime.now(UTC)) updated_at: datetime = Field(default_factory=lambda: datetime.now(UTC)) # --- CALCULATED FIELD --- @computed_field def url(self) -> str: """ Это поле автоматически вычислится и попадет в model_dump() / .json() """ if self.id: return f"/assets/{self.id}" return ""