"""封面模板领域实体。""" from dataclasses import dataclass, field from datetime import UTC, datetime from typing import Any from uuid import uuid4 @dataclass(slots=True) class CoverTemplate: """封面模板实体,支持系统预置和用户自定义。""" id: str user_id: str | None # None 表示系统模板 name: str thumbnail_url: str is_system: bool config: dict[str, Any] created_at: datetime = field(default_factory=lambda: datetime.now(UTC)) updated_at: datetime = field(default_factory=lambda: datetime.now(UTC)) @classmethod def create_system( cls, name: str, config: dict[str, Any] | None = None, thumbnail_url: str = "", ) -> "CoverTemplate": """创建系统模板。""" template_id = uuid4().hex return cls( id=template_id, user_id=None, name=name.strip(), thumbnail_url=thumbnail_url, is_system=True, config=config or {}, ) @classmethod def create_user( cls, user_id: str, name: str, config: dict[str, Any] | None = None, thumbnail_url: str = "", ) -> "CoverTemplate": """创建用户自定义模板。""" clean_name = name.strip() if not clean_name: raise ValueError("模板名称不能为空") template_id = uuid4().hex return cls( id=template_id, user_id=user_id, name=clean_name, thumbnail_url=thumbnail_url, is_system=False, config=config or {}, ) def update( self, name: str | None = None, config: dict[str, Any] | None = None, thumbnail_url: str | None = None, ) -> None: """更新模板属性。""" if name is not None: clean_name = name.strip() if not clean_name: raise ValueError("模板名称不能为空") self.name = clean_name if config is not None: self.config = config if thumbnail_url is not None: self.thumbnail_url = thumbnail_url self.updated_at = datetime.now(UTC)