package router import ( "ai_scheduler/internal/pkg/wx" "context" "encoding/json" "fmt" "github.com/gofiber/fiber/v2" ) // WxRegist 注册一个通用路由:把 /wx/ 的请求转换为对 wx.Request 的调用,使用泛型 map[string]any 作为 Req/Res。 // 这样项目后台可以直接调用所有在 internal/pkg/wx 中定义的 API(路径以 wx.Path 常量为准)。 func WxRegist( r fiber.Router, ) { // POST /api/v1/project/wx/login/getLoginQrCode r.All("wx/*", func(c *fiber.Ctx) error { sub := c.Params("*") if sub == "" { return fiber.ErrBadRequest } var reqBody map[string]any if len(c.Body()) > 0 { if err := json.Unmarshal(c.Body(), &reqBody); err != nil { return fiber.NewError(fiber.StatusBadRequest, "invalid json body: "+err.Error()) } } else { reqBody = map[string]any{} } token := c.Get("X-finder-TOKEN") var res map[string]any // 使用 wx.Request 的泛型版本,Req/Res 类型为 map[string]any if err := wx.Request[map[string]any, map[string]any](context.Background(), token, wx.Api[map[string]any, map[string]any]{Path: wx.Path(sub)}, reqBody, &res); err != nil { // 返回详细错误 return fiber.NewError(fiber.StatusBadGateway, fmt.Sprintf("upstream wx error: %v", err)) } // 直接返回上游 data(已经被 wx.Request 解包) c.Locals("skip_response_wrap", true) return c.JSON(res) }) }