diff --git a/api/response.go b/api/response.go new file mode 100644 index 0000000..b33c7e8 --- /dev/null +++ b/api/response.go @@ -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, + }, + }) +}