35 lines
981 B
Python
35 lines
981 B
Python
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 ""
|