feat: add API response utilities
- 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
This commit is contained in:
47
api/response.go
Normal file
47
api/response.go
Normal file
@@ -0,0 +1,47 @@
|
||||
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,
|
||||
},
|
||||
})
|
||||
}
|
Reference in New Issue
Block a user