106 lines
3.3 KiB
Python
106 lines
3.3 KiB
Python
#!/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 '',
|
|
)
|