#!/usr/bin/env python # -*- coding: utf-8 -*- """ 大屏素材 Schema 定义 """ from datetime import datetime from typing import Optional from pydantic import BaseModel, ConfigDict, Field # ============ 素材分类 Schema ============ class MaterialCategoryCreateIn(BaseModel): """创建素材分类请求""" name: str = Field(..., description="分类名称") code: str = Field(..., description="分类编码") icon: str = Field(default='Image', description="图标名称") sort: int = Field(default=0, description="排序") class MaterialCategoryUpdateIn(BaseModel): """更新素材分类请求""" name: Optional[str] = Field(default=None, description="分类名称") icon: Optional[str] = Field(default=None, description="图标名称") sort: Optional[int] = Field(default=None, description="排序") class MaterialCategoryOut(BaseModel): """素材分类输出""" id: str name: str code: str icon: str sort: int material_count: int = Field(default=0, description="素材数量") model_config = ConfigDict(from_attributes=True) @classmethod def from_orm_model(cls, obj, material_count: int = 0): """从ORM模型转换""" return cls( id=str(obj.id), name=obj.name, code=obj.code, icon=obj.icon or 'Image', sort=obj.sort or 0, material_count=material_count, ) # ============ 素材 Schema ============ class MaterialCreateIn(BaseModel): """创建素材请求""" category_id: Optional[str] = Field(default=None, description="分类ID(为空表示无分类)") name: str = Field(..., description="素材名称") file_id: str = Field(..., description="文件ID(来自文件管理器)") class MaterialUpdateIn(BaseModel): """更新素材请求""" name: Optional[str] = Field(default=None, description="素材名称") category_id: Optional[str] = Field(default=None, description="分类ID") sort: Optional[int] = Field(default=None, description="排序") class MaterialOut(BaseModel): """素材输出""" id: str name: str category_id: str category_name: str = Field(default='', description="分类名称") file_id: Optional[str] = Field(default=None, description="文件ID") file_url: str = Field(default='', description="文件URL") file_type: str = Field(default='image', description="文件类型") file_size: int = Field(default=0, description="文件大小") sort: int = 0 sys_create_datetime: str model_config = ConfigDict(from_attributes=True) @classmethod def from_orm_model( cls, obj, category_name: str = '', file_url: str = '', file_type: str = 'image', file_size: int = 0, ): """从ORM模型转换""" return cls( id=str(obj.id), name=obj.name, category_id=str(obj.category_id) if obj.category_id else '', category_name=category_name, file_id=str(obj.file_id) if obj.file_id else None, file_url=file_url, file_type=file_type, file_size=file_size, sort=obj.sort or 0, sys_create_datetime=obj.sys_create_datetime.strftime('%Y-%m-%d %H:%M:%S') if obj.sys_create_datetime else '', )