mirror of
https://github.com/fastapiadmin/FastapiAdmin.git
synced 2026-09-22 21:06:32 +00:00
本次提交进行了大规模的系统重构: 1. 拆分租户相关模块到platform平台层,重构租户表名与关联关系 2. 迁移日志、工单、插件等模块到对应层级,统一代码结构 3. 重构批量操作接口路径,从/available/setting改为/status/batch 4. 新增批量删除基础模型,统一处理批量操作逻辑 5. 优化导入导出接口,修正路由方法与描述信息 6. 修复循环引用问题,重构依赖注入与类型导入 7. 更新初始化脚本与路由注册,新增平台管理路由 8. 重构岗位模型,新增岗位编码字段与校验 9. 完善部门删除逻辑,新增子部门删除限制 10. 更新初始化数据与配置文件,适配新架构
102 lines
3.2 KiB
Python
102 lines
3.2 KiB
Python
from dataclasses import dataclass
|
|
from typing import Any
|
|
|
|
from fastapi import Query
|
|
from pydantic import BaseModel, ConfigDict, Field, field_validator
|
|
|
|
from app.core.validator import DateTimeStr
|
|
|
|
|
|
class ChatQuerySchema(BaseModel):
|
|
"""WebSocket聊天查询模型"""
|
|
|
|
message: str = Field(..., min_length=1, description="消息内容")
|
|
session_id: str | None = Field(None, description="会话ID")
|
|
files: list[dict[str, Any]] | None = Field(None, description="文件信息")
|
|
|
|
|
|
class ChatSessionCreateSchema(BaseModel):
|
|
"""创建会话模型"""
|
|
|
|
title: str = Field(..., min_length=1, max_length=200, description="会话标题")
|
|
|
|
@field_validator("title")
|
|
@classmethod
|
|
def validate_title(cls, v: str) -> str:
|
|
v = v.strip()
|
|
if len(v) < 1 or len(v) > 200:
|
|
raise ValueError("会话标题长度必须在1-200个字符之间")
|
|
return v
|
|
|
|
|
|
class ChatSessionUpdateSchema(BaseModel):
|
|
"""更新会话模型"""
|
|
|
|
title: str = Field(..., min_length=1, max_length=200, description="会话标题")
|
|
|
|
@field_validator("title")
|
|
@classmethod
|
|
def validate_title(cls, v: str) -> str:
|
|
v = v.strip()
|
|
if len(v) < 1 or len(v) > 200:
|
|
raise ValueError("会话标题长度必须在1-200个字符之间")
|
|
return v
|
|
|
|
|
|
class ChatSessionMessageSchema(BaseModel):
|
|
"""会话消息模型"""
|
|
|
|
id: str = Field(..., description="消息ID")
|
|
role: str = Field(..., description="消息角色")
|
|
content: str = Field(..., description="消息内容")
|
|
created_at: int | None = Field(None, description="创建时间(Unix时间戳)")
|
|
|
|
model_config = ConfigDict(from_attributes=True)
|
|
|
|
|
|
@dataclass
|
|
class ChatSessionQueryParam:
|
|
"""会话查询参数"""
|
|
|
|
def __init__(
|
|
self,
|
|
title: str | None = Query(None, description="会话标题"),
|
|
created_at: list[DateTimeStr] | None = Query(
|
|
None,
|
|
description="创建时间范围",
|
|
examples=["2025-01-01 00:00:00", "2025-12-31 23:59:59"],
|
|
),
|
|
updated_at: list[DateTimeStr] | None = Query(
|
|
None,
|
|
description="更新时间范围",
|
|
examples=["2025-01-01 00:00:00", "2025-12-31 23:59:59"],
|
|
),
|
|
) -> None:
|
|
self.title = title
|
|
self.created_at = created_at
|
|
self.updated_at = updated_at
|
|
|
|
|
|
class AiChatRequestSchema(BaseModel):
|
|
"""AI 对话请求模型(非流式)"""
|
|
|
|
message: str = Field(..., min_length=1, description="用户消息内容")
|
|
session_id: str | None = Field(None, description="会话ID,不传则创建新会话")
|
|
|
|
@field_validator("message")
|
|
@classmethod
|
|
def validate_message(cls, v: str) -> str:
|
|
v = v.strip()
|
|
if len(v) < 1:
|
|
raise ValueError("用户消息内容不能为空")
|
|
return v
|
|
|
|
|
|
class AiChatResponseSchema(BaseModel):
|
|
"""AI 对话响应模型(非流式)"""
|
|
|
|
response: str = Field(..., description="AI 回复内容")
|
|
session_id: str = Field(..., description="会话ID")
|
|
function_calls: list[dict[str, Any]] | None = Field(None, description="函数调用信息")
|
|
action: dict[str, Any] | None = Field(None, description="建议执行的操作")
|