mirror of
https://github.com/fastapiadmin/FastapiAdmin.git
synced 2026-09-26 06:19:04 +00:00
本次提交包含多项优化和修复: 1. 修复CRUD初始化参数传递、搜索参数处理逻辑 2. 更新环境配置中的大模型相关参数 3. 重构部分服务方法命名,统一代码风格 4. 新增多个枚举类型,补充模型关联关系和加载选项 5. 优化查询参数类实现,完善字段校验逻辑 6. 调整Pydantic模型字段注释和类型定义 7. 简化并移除冗余的CRUD方法实现 8. 新增超级管理员权限装饰器 9. 修复邮件日志模型的租户关联和字段定义
100 lines
4.2 KiB
Python
100 lines
4.2 KiB
Python
from dataclasses import dataclass
|
|
|
|
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
|
|
from app.common.enums import QueueEnum, TicketTypeEnum
|
|
from app.core.base_params import BaseQueryParam, TenantByQueryParam, UserByQueryParam
|
|
from app.core.base_schema import BaseSchema, CommonSchema, TenantBySchema, UserBySchema
|
|
|
|
|
|
class TicketCreateSchema(BaseModel):
|
|
"""创建工单"""
|
|
|
|
title: str = Field(..., min_length=1, max_length=200, description="工单标题")
|
|
ticket_content: str = Field(default="", description="工单内容(富文本)")
|
|
summary: str | None = Field(default=None, description="工单内容(纯文本摘要)")
|
|
ticket_type: TicketTypeEnum = Field(default=TicketTypeEnum.SUGGESTION, description="工单类型(suggestion/bug/optimize/other)")
|
|
images: str | None = Field(default=None, description="图片URL列表(JSON数组)")
|
|
description: str | None = Field(default=None, max_length=255, description="工单描述")
|
|
|
|
@field_validator("title")
|
|
@classmethod
|
|
def _validate_title(cls, v: str) -> str:
|
|
v = v.strip()
|
|
if not v:
|
|
raise ValueError("工单标题不能为空")
|
|
return v
|
|
|
|
|
|
class TicketUpdateSchema(BaseModel):
|
|
"""更新工单"""
|
|
|
|
title: str | None = Field(default=None, max_length=200, description="工单标题")
|
|
ticket_content: str | None = Field(default=None, description="工单内容(富文本)")
|
|
summary: str | None = Field(default=None, description="工单内容(纯文本摘要)")
|
|
ticket_type: TicketTypeEnum | None = Field(default=None, description="工单类型")
|
|
status: int | None = Field(default=None, ge=0, le=3, description="状态(0:待处理 1:处理中 2:已完成 3:已关闭)")
|
|
reply: str | None = Field(default=None, description="回复内容")
|
|
assigned_id: int | None = Field(default=None, gt=0, description="处理人ID")
|
|
description: str | None = Field(default=None, max_length=255, description="工单描述")
|
|
|
|
@field_validator("status")
|
|
@classmethod
|
|
def _validate_status(cls, v: int | None) -> int | None:
|
|
if v is None:
|
|
return v
|
|
if v not in {0, 1, 2, 3}:
|
|
raise ValueError("工单状态仅支持 0(待处理)、1(处理中)、2(已完成)、3(已关闭)")
|
|
return v
|
|
|
|
|
|
class TicketOutSchema(BaseSchema, UserBySchema, TenantBySchema):
|
|
"""工单响应"""
|
|
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
title: str = Field(..., description="工单标题")
|
|
ticket_content: str | None = Field(default=None, description="工单内容")
|
|
summary: str | None = Field(default=None, description="摘要")
|
|
ticket_type: TicketTypeEnum = Field(..., description="工单类型")
|
|
status: int = Field(..., description="状态(0:待处理 1:处理中 2:已完成 3:已关闭)")
|
|
images: str | None = Field(default=None, description="图片")
|
|
reply: str | None = Field(default=None, description="回复内容")
|
|
assigned_id: int | None = Field(default=None, description="指派人ID")
|
|
assigned_by: CommonSchema | None = Field(default=None, description="指派人")
|
|
|
|
|
|
class TicketBatchSchema(BaseModel):
|
|
"""批量更新工单"""
|
|
|
|
ids: list[int] = Field(..., min_length=1, description="工单ID列表")
|
|
status: int = Field(..., ge=0, le=3, description="状态(0:待处理 1:处理中 2:已完成 3:已关闭)")
|
|
|
|
@field_validator("status")
|
|
@classmethod
|
|
def _validate_status(cls, v: int) -> int:
|
|
if v not in {0, 1, 2, 3}:
|
|
raise ValueError("工单状态仅支持 0(待处理)、1(处理中)、2(已完成)、3(已关闭)")
|
|
return v
|
|
|
|
|
|
@dataclass
|
|
class TicketQueryParam(BaseQueryParam, UserByQueryParam, TenantByQueryParam):
|
|
"""工单查询参数"""
|
|
|
|
def __init__(
|
|
self,
|
|
title: str | None = None,
|
|
ticket_type: str | None = None,
|
|
assigned_id: int | None = None,
|
|
*args,
|
|
**kwargs,
|
|
) -> None:
|
|
super().__init__(*args, **kwargs)
|
|
if title:
|
|
self.title = (QueueEnum.like.value, title)
|
|
if ticket_type:
|
|
self.ticket_type = (QueueEnum.eq.value, ticket_type)
|
|
if assigned_id:
|
|
self.assigned_id = (QueueEnum.eq.value, assigned_id)
|