from fastapi import APIRouter,Request from pydantic import BaseModel from fastapi import APIRouter, Depends from pydantic import BaseModel, ValidationError 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/wxchat") # 定义请求体的 Pydantic 模型 class GetConfigRequest(BaseModel): wxid: str class SaveConfigRequest(BaseModel): wxid: str @config_router.post("/getconfig",response_model=None) @validate_wxid async def get_config(request: Request, body: GetConfigRequest): wxid = body.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} 没有对应的登录信息"} config=await request.app.state.gewe_service.get_wxchat_config_from_cache_async(wxid) return config @config_router.post("/saveconfig",response_model=None) @validate_wxid async def save_config(request: Request, body: SaveConfigRequest): wxid = body.get("wxid") data = body.get("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} 没有对应的登录信息"} 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}