mirror of
https://github.com/Dvorinka/Trackeep.git
synced 2026-06-04 04:22:57 +00:00
first test
This commit is contained in:
@@ -0,0 +1,184 @@
|
||||
package utils
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"time"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
)
|
||||
|
||||
// APIResponse represents a standard API response
|
||||
type APIResponse struct {
|
||||
Success bool `json:"success"`
|
||||
Data interface{} `json:"data,omitempty"`
|
||||
Message string `json:"message"`
|
||||
Error string `json:"error,omitempty"`
|
||||
Timestamp time.Time `json:"timestamp"`
|
||||
RequestID string `json:"request_id,omitempty"`
|
||||
}
|
||||
|
||||
// PaginatedResponse represents a paginated API response
|
||||
type PaginatedResponse struct {
|
||||
APIResponse
|
||||
Pagination PaginationInfo `json:"pagination"`
|
||||
}
|
||||
|
||||
// PaginationInfo contains pagination metadata
|
||||
type PaginationInfo struct {
|
||||
Page int `json:"page"`
|
||||
PerPage int `json:"per_page"`
|
||||
Total int64 `json:"total"`
|
||||
TotalPages int `json:"total_pages"`
|
||||
HasNext bool `json:"has_next"`
|
||||
HasPrev bool `json:"has_prev"`
|
||||
}
|
||||
|
||||
// Success sends a successful response
|
||||
func Success(c *gin.Context, data interface{}, message ...string) {
|
||||
msg := "Operation successful"
|
||||
if len(message) > 0 {
|
||||
msg = message[0]
|
||||
}
|
||||
|
||||
response := APIResponse{
|
||||
Success: true,
|
||||
Data: data,
|
||||
Message: msg,
|
||||
Timestamp: time.Now(),
|
||||
RequestID: c.GetString("RequestID"),
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, response)
|
||||
}
|
||||
|
||||
// Error sends an error response
|
||||
func Error(c *gin.Context, statusCode int, err error, message ...string) {
|
||||
msg := "An error occurred"
|
||||
if len(message) > 0 {
|
||||
msg = message[0]
|
||||
}
|
||||
|
||||
response := APIResponse{
|
||||
Success: false,
|
||||
Message: msg,
|
||||
Error: err.Error(),
|
||||
Timestamp: time.Now(),
|
||||
RequestID: c.GetString("RequestID"),
|
||||
}
|
||||
|
||||
c.JSON(statusCode, response)
|
||||
}
|
||||
|
||||
// ValidationError sends a validation error response
|
||||
func ValidationError(c *gin.Context, errors interface{}) {
|
||||
response := APIResponse{
|
||||
Success: false,
|
||||
Message: "Validation failed",
|
||||
Error: "Invalid input data",
|
||||
Data: errors,
|
||||
Timestamp: time.Now(),
|
||||
RequestID: c.GetString("RequestID"),
|
||||
}
|
||||
|
||||
c.JSON(http.StatusBadRequest, response)
|
||||
}
|
||||
|
||||
// Paginated sends a paginated response
|
||||
func Paginated(c *gin.Context, data interface{}, pagination PaginationInfo, message ...string) {
|
||||
msg := "Data retrieved successfully"
|
||||
if len(message) > 0 {
|
||||
msg = message[0]
|
||||
}
|
||||
|
||||
response := PaginatedResponse{
|
||||
APIResponse: APIResponse{
|
||||
Success: true,
|
||||
Data: data,
|
||||
Message: msg,
|
||||
Timestamp: time.Now(),
|
||||
RequestID: c.GetString("RequestID"),
|
||||
},
|
||||
Pagination: pagination,
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, response)
|
||||
}
|
||||
|
||||
// CalculatePagination calculates pagination information
|
||||
func CalculatePagination(page, perPage int, total int64) PaginationInfo {
|
||||
if page < 1 {
|
||||
page = 1
|
||||
}
|
||||
if perPage < 1 {
|
||||
perPage = 10
|
||||
}
|
||||
if perPage > 100 {
|
||||
perPage = 100
|
||||
}
|
||||
|
||||
totalPages := int((total + int64(perPage) - 1) / int64(perPage))
|
||||
hasNext := page < totalPages
|
||||
hasPrev := page > 1
|
||||
|
||||
return PaginationInfo{
|
||||
Page: page,
|
||||
PerPage: perPage,
|
||||
Total: total,
|
||||
TotalPages: totalPages,
|
||||
HasNext: hasNext,
|
||||
HasPrev: hasPrev,
|
||||
}
|
||||
}
|
||||
|
||||
// Created sends a created response
|
||||
func Created(c *gin.Context, data interface{}, message ...string) {
|
||||
msg := "Resource created successfully"
|
||||
if len(message) > 0 {
|
||||
msg = message[0]
|
||||
}
|
||||
|
||||
response := APIResponse{
|
||||
Success: true,
|
||||
Data: data,
|
||||
Message: msg,
|
||||
Timestamp: time.Now(),
|
||||
RequestID: c.GetString("RequestID"),
|
||||
}
|
||||
|
||||
c.JSON(http.StatusCreated, response)
|
||||
}
|
||||
|
||||
// Updated sends an updated response
|
||||
func Updated(c *gin.Context, data interface{}, message ...string) {
|
||||
msg := "Resource updated successfully"
|
||||
if len(message) > 0 {
|
||||
msg = message[0]
|
||||
}
|
||||
|
||||
response := APIResponse{
|
||||
Success: true,
|
||||
Data: data,
|
||||
Message: msg,
|
||||
Timestamp: time.Now(),
|
||||
RequestID: c.GetString("RequestID"),
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, response)
|
||||
}
|
||||
|
||||
// Deleted sends a deleted response
|
||||
func Deleted(c *gin.Context, message ...string) {
|
||||
msg := "Resource deleted successfully"
|
||||
if len(message) > 0 {
|
||||
msg = message[0]
|
||||
}
|
||||
|
||||
response := APIResponse{
|
||||
Success: true,
|
||||
Message: msg,
|
||||
Timestamp: time.Now(),
|
||||
RequestID: c.GetString("RequestID"),
|
||||
}
|
||||
|
||||
c.JSON(http.StatusOK, response)
|
||||
}
|
||||
Reference in New Issue
Block a user