|
- 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': '操作成功'}
|