xy_sh-20260727101126/xy_sh/internal/router/router.go

82 lines
1.6 KiB
Go

package router
import (
"xy_sh/internal/entities"
"xy_sh/internal/middleware"
"xy_sh/internal/service"
"xy_sh/pkg/crypto"
"xy_sh/tmpl/errcode"
"github.com/gofiber/fiber/v2"
"github.com/gofiber/fiber/v2/log"
)
func SetupRoutes(
app *fiber.App,
service *service.Order,
) {
v1 := app.Group("/api/v1", middleware.SetLogReq())
app.Get("/test", func(c *fiber.Ctx) error {
return c.SendString("test ok")
})
registerResponse(v1)
v1.Post("/order/create",
middleware.SignVerifyMiddleware(),
service.CreateOrderHandler,
)
v1.Post("/order/query",
middleware.SignVerifyMiddleware(),
service.QueryOrderHandler,
)
v1.Post("/callback/notify",
service.CallbackHandler,
)
}
func registerResponse(router fiber.Router) {
// 自定义返回
router.Use(func(c *fiber.Ctx) error {
err := c.Next()
return registerCommon(c, err)
})
}
func registerCommon(c *fiber.Ctx, err error) error {
log.Info("Response: ", string(c.Response().Body()), " Err: ", err)
if c.Path() == "/api/v1/callback/notify" {
return nil
}
// 如果有错误发生
if err != nil {
// 返回自定义错误响应
return c.JSON(fiber.Map{
"msg": err.Error(),
"code": entities.CodeFailed,
"data": nil,
})
}
var data string
if len(c.Response().Body()) > 0 {
data, err = crypto.SM4CBCEncrypt(c.Response().Body())
if err != nil {
return c.JSON(fiber.Map{
"msg": err.Error(),
"code": entities.CodeFailed,
"data": nil,
})
}
}
return c.JSON(fiber.Map{
"data": data,
"message": errcode.Success.Error(),
"code": errcode.Success.Code(),
})
}