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