mirror of
https://github.com/Dvorinka/Productier.git
synced 2026-06-03 20:13:01 +00:00
first commit
This commit is contained in:
@@ -0,0 +1,62 @@
|
||||
package httpapi
|
||||
|
||||
import (
|
||||
"net/http"
|
||||
"strings"
|
||||
|
||||
"github.com/gin-gonic/gin"
|
||||
"github.com/google/uuid"
|
||||
)
|
||||
|
||||
const requestIDContextKey = "requestID"
|
||||
|
||||
func requestIDMiddleware() gin.HandlerFunc {
|
||||
return func(c *gin.Context) {
|
||||
requestID := strings.TrimSpace(c.GetHeader("X-Request-Id"))
|
||||
if requestID == "" {
|
||||
requestID = uuid.NewString()
|
||||
}
|
||||
c.Set(requestIDContextKey, requestID)
|
||||
c.Header("X-Request-Id", requestID)
|
||||
c.Next()
|
||||
}
|
||||
}
|
||||
|
||||
func requestIDFromContext(c *gin.Context) string {
|
||||
if value, exists := c.Get(requestIDContextKey); exists {
|
||||
if requestID, ok := value.(string); ok {
|
||||
return requestID
|
||||
}
|
||||
}
|
||||
return ""
|
||||
}
|
||||
|
||||
func (s *Server) writeStatusError(c *gin.Context, status int, message string) {
|
||||
code := "internal_error"
|
||||
switch status {
|
||||
case http.StatusBadRequest:
|
||||
code = "bad_request"
|
||||
case http.StatusUnauthorized:
|
||||
code = "unauthorized"
|
||||
case http.StatusForbidden:
|
||||
code = "forbidden"
|
||||
case http.StatusNotFound:
|
||||
code = "not_found"
|
||||
case http.StatusConflict:
|
||||
code = "conflict"
|
||||
case http.StatusBadGateway:
|
||||
code = "upstream_error"
|
||||
case http.StatusServiceUnavailable:
|
||||
code = "service_unavailable"
|
||||
}
|
||||
if strings.TrimSpace(message) == "" {
|
||||
message = http.StatusText(status)
|
||||
}
|
||||
c.JSON(status, gin.H{
|
||||
"error": gin.H{
|
||||
"code": code,
|
||||
"message": message,
|
||||
"requestId": requestIDFromContext(c),
|
||||
},
|
||||
})
|
||||
}
|
||||
Reference in New Issue
Block a user