| package utils |
|
|
| import ( |
| "errors" |
|
|
| dto "dinacom-11.0-backend/models/dto" |
| http_error "dinacom-11.0-backend/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.DATA_NOT_FOUND) || 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 { |
| 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 |
| } |
| } |
|
|
| } |
| func SendSuccessResponse(c *gin.Context, message string, data interface{}) { |
| ResponseOK[interface{}, interface{}](c, nil, data) |
| } |
|
|
| func SendErrorResponse(c *gin.Context, code int, message string) { |
| c.JSON(code, dto.ErrorResponse{ |
| Status: "error", |
| Message: message, |
| }) |
| } |
|
|