GIN Error Handler

pkg/response/response.go

package response

import "github.com/gin-gonic/gin"

type ReponseData struct {
	Code    int         `json:"code"`
	Message string      `json:"message"`
	Data    interface{} `json:"data"`
}

func SuccessResponse(c *gin.Context, code int, data interface{}) {
	c.JSON(code, ReponseData{
		Code:    code,
		Message: msg[code],
		Data:    data,
	})
}

func ErrorResponse(c *gin.Context, code int, message string) {
	c.JSON(code, ReponseData{
		Code:    code,
		Message: msg[code],
		Data:    nil,
	})
}

pkg/response/httpStatusCode.go

package response

const (
	ErrCodeSuccess             = 200
	ErrCodeNotFound            = 404
	ErrCodeBadRequest          = 400
	ErrCodeUnauthorized        = 401
	ErrCodeForbidden           = 403
	ErrCodeConflict            = 409
	ErrCodeInternalServerError = 500
	ErrCodeServiceUnavailable  = 503
	ErrCodeGatewayTimeout      = 504
	ErrCodeTooManyRequests     = 429
	ErrCodeNotAcceptable       = 406
)

// message

var msg = map[int]string{
	ErrCodeSuccess:             "Success",
	ErrCodeNotFound:            "Not Found",
	ErrCodeBadRequest:          "Bad Request",
	ErrCodeUnauthorized:        "Unauthorized",
	ErrCodeForbidden:           "Forbidden",
	ErrCodeConflict:            "Conflict",
	ErrCodeInternalServerError: "Internal Server Error",
	ErrCodeServiceUnavailable:  "Service Unavailable",
	ErrCodeGatewayTimeout:      "Gateway Timeout",
	ErrCodeTooManyRequests:     "Too Many Requests",
	ErrCodeNotAcceptable:       "Not Acceptable",
}

Controller

package controller

import (
	"github.com/TaiTitans/go-ecommerce-backend-api/internal/services"
	"github.com/TaiTitans/go-ecommerce-backend-api/pkg/response"
	"github.com/gin-gonic/gin"
)

type UserController struct {
	userService *services.UserService
}

func NewUserController() *UserController {
	return &UserController{
		userService: services.NewUserService(),
	}
}

// controller -> service -> repo -> model -> database
func (uc *UserController) GetUserByID(c *gin.Context) {
	id := c.Param("id")

	user, err := uc.userService.GetInforUserService()
	if err != nil {
		return response.ErrorResponse(c, 400, "Error")
	}
	return response.SuccessResponse(c, 200, user)
}

Last updated