Files
ai-agent-admin/backend-fastapi/online_dev/screen_design/material_schema.py
T

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 '',
)