Spaces:
Runtime error
Runtime error
| 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 | |
| } | |
| } | |
| } | |