quzuu-api-dev-v2 / utils /response_util.go
lifedebugger's picture
Deploy files from GitHub repository
4542d62
package utils
import (
"errors"
"abdanhafidz.com/go-boilerplate/models/dto"
http_error "abdanhafidz.com/go-boilerplate/models/error"
"github.com/gin-gonic/gin"
"gorm.io/gorm"
)
func ResponseOK[Tdata any, TMetaData any](c *gin.Context, metaData TMetaData, data Tdata) {
c.JSON(200, dto.SuccessResponse[Tdata]{
Status: "success",
Data: data,
Message: "Data retrieved Successfully!",
MetaData: metaData,
})
}
func ResponseFAILED[TMetaData any](c *gin.Context, metaData TMetaData, err error) {
if errors.Is(err, http_error.BAD_REQUEST_ERROR) {
c.JSON(400, dto.ErrorResponse{
Status: "error",
Error: err,
Message: "Invalid request format!",
MetaData: metaData,
})
return
} else if errors.Is(err, http_error.INTERNAL_SERVER_ERROR) {
c.JSON(500, dto.ErrorResponse{
Status: "error",
Error: err,
Message: "Internal Server Error!",
MetaData: metaData,
})
return
} else if errors.Is(err, http_error.UNAUTHORIZED) {
c.JSON(401, dto.ErrorResponse{
Status: "error",
Error: err,
Message: "Unauthorized, you don't have permission to access this service!",
MetaData: metaData,
})
return
} else if errors.Is(err, http_error.NOT_FOUND_ERROR) || errors.Is(err, gorm.ErrRecordNotFound) {
c.JSON(404, dto.ErrorResponse{
Status: "error",
Error: err,
Message: "There is not data with given credential / given parameter!",
MetaData: metaData,
})
return
} else if errors.Is(err, http_error.TIMEOUT) {
c.JSON(504, dto.ErrorResponse{
Status: "error",
Error: err,
Message: "Server took to long to respond!",
MetaData: metaData,
})
return
} else if errors.Is(err, http_error.FORBIDDEN_ERROR) || errors.Is(err, http_error.INVALID_CODE) {
c.JSON(403, dto.ErrorResponse{
Status: "error",
Error: err,
Message: err.Error(),
MetaData: metaData,
})
return
} else if errors.Is(err, http_error.EVENT_START_DATE_IN_PAST) ||
errors.Is(err, http_error.EVENT_START_DATE_INVALID) ||
errors.Is(err, http_error.EVENT_END_DATE_INVALID) ||
errors.Is(err, http_error.INVALID_DATE_FORMAT) {
c.JSON(400, dto.ErrorResponse{
Status: "error",
Error: err,
Message: err.Error(),
MetaData: metaData,
})
return
} else {
c.JSON(405, dto.ErrorResponse{
Status: "error",
Error: err,
Message: err.Error(),
MetaData: metaData,
})
return
}
}
func SendResponse[Tdata any, TMetaData any](c *gin.Context, metaData TMetaData, data Tdata, err error) {
if !c.IsAborted() {
if err != nil {
ResponseFAILED(c, metaData, err)
c.Abort()
return
} else {
ResponseOK(c, metaData, data)
c.Abort()
return
}
}
}