from fastapi import APIRouter,Request from pydantic import BaseModel from fastapi import APIRouter, Depends from pydantic import BaseModel, ValidationError from typing import Dict, Any from services.gewe_service import GeWeService,get_gewe_service from services.redis_service import RedisService from model.models import AgentConfig,validate_wxid config_router = APIRouter(prefix="/api") # 定义请求体的 Pydantic 模型 class GetConfigRequest(BaseModel): wxid: str class SaveConfigRequest(BaseModel): wxid: str data: dict @config_router.post("/wxchat/getconfig",response_model=None) #@validate_wxid async def get_config(request: Request, body: GetConfigRequest): wxid = body.wxid if not wxid: return {"code": 400, "message": "wxid 不能为空"} k,loginfo=await request.app.state.gewe_service.get_login_info_by_wxid_async(wxid) if not k: return {"code":404,"message":f"{wxid} 没有对应的登录信息"} login_status=loginfo.get('status','0') if login_status != '1': return {"code": 401, "message": f"{wxid} 已经离线"} config=await request.app.state.gewe_service.get_wxchat_config_from_cache_async(wxid) print(config) try: # 使用 Pydantic 严格校验数据类型和结构 validated_config = AgentConfig.model_validate(config) except ValidationError as e: return {'code': 407, 'message': e.errors().__str__()} return validated_config @config_router.post("/wxchat/saveconfig",response_model=None) #@validate_wxid async def save_config(request: Request, body: SaveConfigRequest): wxid = body.wxid data = body.data # k,loginfo=await request.app.state.gewe_service.get_login_info_by_wxid_async(wxid) # if not k: # return {"code":404,"message":f"{wxid} 没有对应的登录信息"} if not wxid: return {"code": 400, "message": "wxid 不能为空"} k,loginfo=await request.app.state.gewe_service.get_login_info_by_wxid_async(wxid) if not k: return {"code":404,"message":f"{wxid} 没有对应的登录信息"} login_status=loginfo.get('status','0') if login_status != '1': return {"code": 401, "message": f"{wxid} 已经离线"} try: # 使用 Pydantic 严格校验数据类型和结构 validated_config = AgentConfig.model_validate(data) except ValidationError as e: return {'code': 407, 'message': e.errors().__str__()} await request.app.state.gewe_service.save_wxchat_config_async(wxid, data) return {'wxid': wxid, 'config': data} @config_router.post("/global/getconfig",response_model=None) async def get_global_config(request: Request): #await request.app.state.gewe_service.get_login_info_by_wxid_async() config=await request.app.state.gewe_service.get_global_config_from_cache_async() return config @config_router.post("/global/saveconfig",response_model=None) async def save_global_config(request: Request, body: Dict[str, Any]): #await request.app.state.gewe_service.get_login_info_by_wxid_async() await request.app.state.gewe_service.save_global_config_async(body) return {'message': '操作成功'}