Files

150 lines
5.4 KiB
Python
Raw Permalink Blame History

This file contains ambiguous Unicode characters
This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.
#!/usr/bin/env python
# -*- coding: utf-8 -*-
"""
大屏设计器 Schema 定义
"""
from datetime import datetime
from typing import Any, Dict, Optional
from pydantic import BaseModel, ConfigDict, Field
class ScreenProjectBase(BaseModel):
"""大屏项目基础信息"""
application_id: Optional[str] = Field(None, description="所属应用ID")
name: str = Field(..., description="项目名称")
code: str = Field(..., pattern=r"^[a-zA-Z][a-zA-Z0-9_]*$", description="项目编码(字母开头,只能包含字母、数字和下划线)")
description: str = Field(default='', description="项目描述")
sort: int = Field(default=0, description="排序")
class ScreenProjectCreateIn(ScreenProjectBase):
"""创建大屏项目请求"""
screen_config: Dict[str, Any] = Field(default_factory=dict, description="大屏设计配置")
thumbnail: str = Field(default='', description="缩略图")
class ScreenProjectUpdateIn(BaseModel):
"""更新大屏项目请求"""
name: Optional[str] = Field(default=None, description="项目名称")
description: Optional[str] = Field(default=None, description="项目描述")
sort: Optional[int] = Field(default=None, description="排序")
screen_config: Optional[Dict[str, Any]] = Field(default=None, description="大屏设计配置")
thumbnail: Optional[str] = Field(default=None, description="缩略图")
class ScreenProjectOut(BaseModel):
"""大屏项目详情输出"""
id: str
application_id: Optional[str] = None
name: str
code: str
description: str
status: str
version: int
thumbnail: str
screen_config: Dict[str, Any]
sort: int
access_password: str = Field(default='', description="访问密码")
published_at: Optional[str] = Field(default=None, description="发布时间")
sys_create_datetime: str
sys_update_datetime: str
model_config = ConfigDict(from_attributes=True)
@classmethod
def from_orm_model(cls, obj):
"""从ORM模型转换"""
return cls(
id=str(obj.id),
application_id=obj.application_id,
name=obj.name,
code=obj.code,
description=obj.description or '',
status=obj.status or 'draft',
version=obj.version or 1,
thumbnail=obj.thumbnail or '',
screen_config=obj.screen_config or {},
sort=obj.sort or 0,
access_password=obj.access_password or '',
published_at=obj.published_at.strftime('%Y-%m-%d %H:%M:%S') if obj.published_at else None,
sys_create_datetime=obj.sys_create_datetime.strftime('%Y-%m-%d %H:%M:%S') if obj.sys_create_datetime else '',
sys_update_datetime=obj.sys_update_datetime.strftime('%Y-%m-%d %H:%M:%S') if obj.sys_update_datetime else '',
)
class ScreenProjectListOut(BaseModel):
"""大屏项目列表输出(不含screen_config"""
id: str
application_id: Optional[str] = None
name: str
code: str
description: str
status: str
version: int
thumbnail: str
sort: int
access_password: str = Field(default='', description="访问密码")
published_at: Optional[str] = Field(default=None, description="发布时间")
sys_create_datetime: str
sys_update_datetime: str
model_config = ConfigDict(from_attributes=True)
@classmethod
def from_orm_model(cls, obj):
"""从ORM模型转换"""
return cls(
id=str(obj.id),
application_id=obj.application_id,
name=obj.name,
code=obj.code,
description=obj.description or '',
status=obj.status or 'draft',
version=obj.version or 1,
thumbnail=obj.thumbnail or '',
sort=obj.sort or 0,
access_password=obj.access_password or '',
published_at=obj.published_at.strftime('%Y-%m-%d %H:%M:%S') if obj.published_at else None,
sys_create_datetime=obj.sys_create_datetime.strftime('%Y-%m-%d %H:%M:%S') if obj.sys_create_datetime else '',
sys_update_datetime=obj.sys_update_datetime.strftime('%Y-%m-%d %H:%M:%S') if obj.sys_update_datetime else '',
)
class ScreenExportOut(BaseModel):
"""大屏配置导出"""
name: str
code: str
description: str
screen_config: Dict[str, Any]
class ScreenImportCheckIn(BaseModel):
"""大屏导入预检查请求"""
code: str = Field(..., description="项目编码")
class ScreenImportCheckOut(BaseModel):
"""大屏导入预检查结果"""
code_exists: bool = Field(..., description="项目编码是否已存在")
can_import: bool = Field(..., description="是否可以直接导入(编码不冲突)")
class ScreenImportIn(BaseModel):
"""大屏配置导入"""
application_id: Optional[str] = Field(None, description="所属应用ID")
name: str = Field(..., description="项目名称")
code: str = Field(..., description="项目编码")
description: str = Field(default='', description="项目描述")
screen_config: Dict[str, Any] = Field(default_factory=dict, description="大屏设计配置")
class ScreenPublishIn(BaseModel):
"""发布大屏请求"""
access_password: Optional[str] = Field(default=None, description="访问密码")
class ScreenSetPasswordIn(BaseModel):
"""设置访问密码请求"""
access_password: str = Field(default='', description="访问密码,空字符串表示清除密码")