64 lines
1.4 KiB
Go
64 lines
1.4 KiB
Go
package response
|
|
|
|
import (
|
|
"time"
|
|
|
|
"github.com/gofiber/fiber/v2"
|
|
)
|
|
|
|
type Status string
|
|
|
|
const (
|
|
Error Status = "error"
|
|
Success Status = "success"
|
|
)
|
|
|
|
type APIResponse struct {
|
|
Status Status `json:"status"`
|
|
Message string `json:"message"`
|
|
Data interface{} `json:"data,omitempty"`
|
|
Metadata interface{} `json:"metadata,omitempty"`
|
|
Page *int `json:"page,omitempty"`
|
|
Total *int `json:"total,omitempty"`
|
|
Timestamp time.Time `json:"timestamp"`
|
|
}
|
|
|
|
func NewAPIResponse(
|
|
status Status, message string,
|
|
data interface{}, metadata interface{},
|
|
page *int, total *int,
|
|
) APIResponse {
|
|
|
|
return APIResponse{
|
|
Status: status,
|
|
Message: message,
|
|
Data: data,
|
|
Metadata: metadata,
|
|
Timestamp: time.Now(),
|
|
Page: page,
|
|
Total: total,
|
|
}
|
|
}
|
|
func WriteJSON(c *fiber.Ctx, status int, message string, data, metadata interface{}) error {
|
|
var apiStatus Status
|
|
if status >= 200 && status <= 299 {
|
|
apiStatus = Success
|
|
} else {
|
|
apiStatus = Error
|
|
}
|
|
apiRes := NewAPIResponse(apiStatus, message, data, metadata, nil, nil)
|
|
|
|
return c.Status(status).JSON(apiRes)
|
|
}
|
|
func WritePaginatedJSON(c *fiber.Ctx, status int, message string, data, metadata interface{}, page int, total int) error {
|
|
var apiStatus Status
|
|
if status >= 200 && status <= 299 {
|
|
apiStatus = Success
|
|
} else {
|
|
apiStatus = Error
|
|
}
|
|
apiRes := NewAPIResponse(apiStatus, message, data, metadata, &page, &total)
|
|
|
|
return c.Status(status).JSON(apiRes)
|
|
}
|