| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191 |
- package controllers
- import (
- "fwh-toolbox-server/dto"
- "time"
- "github.com/gofiber/fiber/v2"
- "github.com/google/uuid"
- )
- const traceIdHeader string = "X-Trace-Id"
- type Response[T any] struct {
- Code int `json:"code"`
- Message string `json:"message"`
- Data T `json:"data"`
- TraceID string `json:"traceId"`
- Timestamp int64 `json:"timestamp"`
- }
- type ResponsePage[T any] struct {
- Code int `json:"code"`
- Message string `json:"message"`
- Data []T `json:"data"`
- PageSize uint `json:"pageSize"`
- PageNum uint `json:"pageNum"`
- Total uint `json:"total"`
- TraceID string `json:"traceId"`
- Timestamp int64 `json:"timestamp"`
- }
- type ResponseNoData struct {
- Code int `json:"code"`
- Message string `json:"message"`
- TraceID string `json:"traceId"`
- Timestamp int64 `json:"timestamp"`
- }
- // 成功返回 200
- func Success[T any](c *fiber.Ctx, data T, msg ...string) error {
- message := "success"
- if len(msg) > 0 {
- message = msg[0]
- }
- traceId := c.Get(traceIdHeader) // 从请求头取
- if traceId == "" {
- traceId = uuid.New().String() // 没有就生成
- // 设置到响应头,让前端也能拿到
- c.Set(traceIdHeader, traceId)
- }
- return c.Status(fiber.StatusOK).JSON(Response[T]{
- Code: 0,
- Message: message,
- Data: data,
- TraceID: traceId,
- Timestamp: time.Now().UnixMilli(),
- })
- }
- // 成功返回 200
- func SuccessPage[T any](c *fiber.Ctx, data *dto.ResPage[T], msg ...string) error {
- message := "success"
- if len(msg) > 0 {
- message = msg[0]
- }
- traceId := c.Get(traceIdHeader) // 从请求头取
- if traceId == "" {
- traceId = uuid.New().String() // 没有就生成
- // 设置到响应头,让前端也能拿到
- c.Set(traceIdHeader, traceId)
- }
- return c.Status(fiber.StatusOK).JSON(ResponsePage[T]{
- Code: 0,
- Message: message,
- Data: data.Data,
- PageSize: data.PageSize,
- PageNum: data.PageNum,
- Total: data.Total,
- TraceID: traceId,
- Timestamp: time.Now().UnixMilli(),
- })
- }
- // 失败返回 400
- func Fail(c *fiber.Ctx, msg string) error {
- traceId := c.Get(traceIdHeader) // 从请求头取
- if traceId == "" {
- traceId = uuid.New().String() // 没有就生成
- // 设置到响应头,让前端也能拿到
- c.Set(traceIdHeader, traceId)
- }
- return c.Status(fiber.StatusBadRequest).JSON(ResponseNoData{
- Code: 1,
- Message: msg,
- TraceID: traceId,
- Timestamp: time.Now().UnixMilli(),
- })
- }
- // 401 未认证
- func Unauthorized(c *fiber.Ctx, msg ...string) error {
- message := "unauthorized"
- if len(msg) > 0 {
- message = msg[0]
- }
- traceId := c.Get(traceIdHeader) // 从请求头取
- if traceId == "" {
- traceId = uuid.New().String() // 没有就生成
- // 设置到响应头,让前端也能拿到
- c.Set(traceIdHeader, traceId)
- }
- return c.Status(fiber.StatusUnauthorized).JSON(ResponseNoData{
- Code: 401,
- Message: message,
- TraceID: traceId,
- Timestamp: time.Now().UnixMilli(),
- })
- }
- // 403 禁止访问
- func Forbidden(c *fiber.Ctx, msg ...string) error {
- message := "forbidden"
- if len(msg) > 0 {
- message = msg[0]
- }
- traceId := c.Get(traceIdHeader) // 从请求头取
- if traceId == "" {
- traceId = uuid.New().String() // 没有就生成
- // 设置到响应头,让前端也能拿到
- c.Set(traceIdHeader, traceId)
- }
- return c.Status(fiber.StatusForbidden).JSON(ResponseNoData{
- Code: 403,
- Message: message,
- TraceID: traceId,
- Timestamp: time.Now().UnixMilli(),
- })
- }
- // 404 或无数据
- func NotFound(c *fiber.Ctx, msg ...string) error {
- message := "not found"
- if len(msg) > 0 {
- message = msg[0]
- }
- traceId := c.Get(traceIdHeader) // 从请求头取
- if traceId == "" {
- traceId = uuid.New().String() // 没有就生成
- // 设置到响应头,让前端也能拿到
- c.Set(traceIdHeader, traceId)
- }
- return c.Status(fiber.StatusNotFound).JSON(ResponseNoData{
- Code: 1,
- Message: message,
- TraceID: traceId,
- Timestamp: time.Now().UnixMilli(),
- })
- }
- // 空响应(204 No Content)
- func NoContent(c *fiber.Ctx) error {
- return c.SendStatus(fiber.StatusNoContent)
- }
- // 服务器错误 500
- func Error(c *fiber.Ctx, msg string) error {
- traceId := c.Get(traceIdHeader) // 从请求头取
- if traceId == "" {
- traceId = uuid.New().String() // 没有就生成
- // 设置到响应头,让前端也能拿到
- c.Set(traceIdHeader, traceId)
- }
- return c.Status(fiber.StatusInternalServerError).JSON(ResponseNoData{
- Code: 500,
- Message: msg,
- TraceID: traceId,
- Timestamp: time.Now().UnixMilli(),
- })
- }
|