No puede seleccionar más de 25 temas Los temas deben comenzar con una letra o número, pueden incluir guiones ('-') y pueden tener hasta 35 caracteres de largo.

77 líneas
2.4KB

  1. from fastapi import APIRouter,Request
  2. from pydantic import BaseModel
  3. from fastapi import APIRouter, Depends
  4. from pydantic import BaseModel, ValidationError
  5. from services.gewe_service import GeWeService,get_gewe_service
  6. from services.redis_service import RedisService
  7. from model.models import AgentConfig,validate_wxid
  8. config_router = APIRouter(prefix="/api/wxchat")
  9. # 定义请求体的 Pydantic 模型
  10. class GetConfigRequest(BaseModel):
  11. wxid: str
  12. class SaveConfigRequest(BaseModel):
  13. wxid: str
  14. data: dict
  15. @config_router.post("/getconfig",response_model=None)
  16. #@validate_wxid
  17. async def get_config(request: Request, body: GetConfigRequest):
  18. wxid = body.wxid
  19. if not wxid:
  20. return {"code": 400, "message": "wxid 不能为空"}
  21. k,loginfo=await request.app.state.gewe_service.get_login_info_by_wxid_async(wxid)
  22. if not k:
  23. return {"code":404,"message":f"{wxid} 没有对应的登录信息"}
  24. login_status=loginfo.get('status','0')
  25. if login_status != '1':
  26. return {"code": 401, "message": f"{wxid} 已经离线"}
  27. config=await request.app.state.gewe_service.get_wxchat_config_from_cache_async(wxid)
  28. return config
  29. @config_router.post("/saveconfig",response_model=None)
  30. #@validate_wxid
  31. async def save_config(request: Request, body: SaveConfigRequest):
  32. wxid = body.wxid
  33. data = body.data
  34. # k,loginfo=await request.app.state.gewe_service.get_login_info_by_wxid_async(wxid)
  35. # if not k:
  36. # return {"code":404,"message":f"{wxid} 没有对应的登录信息"}
  37. if not wxid:
  38. return {"code": 400, "message": "wxid 不能为空"}
  39. k,loginfo=await request.app.state.gewe_service.get_login_info_by_wxid_async(wxid)
  40. if not k:
  41. return {"code":404,"message":f"{wxid} 没有对应的登录信息"}
  42. login_status=loginfo.get('status','0')
  43. if login_status != '1':
  44. return {"code": 401, "message": f"{wxid} 已经离线"}
  45. try:
  46. # 使用 Pydantic 严格校验数据类型和结构
  47. validated_config = AgentConfig.model_validate(data)
  48. except ValidationError as e:
  49. return {'code': 407, 'message': e.errors().__str__()}
  50. await request.app.state.gewe_service.save_wxchat_config_async(wxid, data)
  51. return {'wxid': wxid, 'config': data}