
- Add standardized API response structures - Include success and error response helpers - Add request ID tracking for better debugging - Support pagination metadata and links - Provide consistent API response format across all endpoints
48 lines
1.0 KiB
Go
48 lines
1.0 KiB
Go
package api
|
|
|
|
import "github.com/gofiber/fiber/v2"
|
|
|
|
type Response struct {
|
|
Data interface{} `json:"data"`
|
|
Meta fiber.Map `json:"_meta"`
|
|
Links *fiber.Map `json:"_links"`
|
|
}
|
|
|
|
func Success(c *fiber.Ctx, data interface{}, status int, paginationInformation *fiber.Map, paginationLinks *fiber.Map) error {
|
|
requestID := string(c.Response().Header.Peek("X-Request-ID"))
|
|
if requestID == "" {
|
|
requestID = "unknown"
|
|
}
|
|
|
|
response := Response{
|
|
Data: data,
|
|
Meta: fiber.Map{
|
|
"request_id": requestID,
|
|
},
|
|
}
|
|
|
|
if paginationInformation != nil {
|
|
response.Meta["pagination"] = paginationInformation
|
|
}
|
|
|
|
if paginationLinks != nil {
|
|
response.Links = paginationLinks
|
|
}
|
|
|
|
return c.Status(status).JSON(response)
|
|
}
|
|
|
|
func Error(c *fiber.Ctx, message string, status int, data interface{}) error {
|
|
requestID := string(c.Response().Header.Peek("X-Request-ID"))
|
|
if requestID == "" {
|
|
requestID = "unknown"
|
|
}
|
|
return c.Status(status).JSON(Response{
|
|
Data: data,
|
|
Meta: fiber.Map{
|
|
"message": message,
|
|
"request_id": requestID,
|
|
},
|
|
})
|
|
}
|