package router import ( "fmt" "net/http" "strings" "github.com/labstack/echo/v4" "github.com/dimaskiddo/go-whatsapp-multidevice-rest/pkg/log" ) type ResSuccess struct { Status bool `json:"status"` Code int `json:"code"` Message string `json:"message"` } type ResSuccessWithData struct { Status bool `json:"status"` Code int `json:"code"` Message string `json:"message"` Data interface{} `json:"data"` } type ResError struct { Status bool `json:"status"` Code int `json:"code"` Error string `json:"error"` } func logSuccess(c echo.Context, code int, message string) { statusMessage := http.StatusText(code) if statusMessage == message || c.Request().RequestURI == BaseURL { log.Print(c).Info(fmt.Sprintf("%d %v", code, statusMessage)) } else { log.Print(c).Info(fmt.Sprintf("%d %v", code, message)) } } func logError(c echo.Context, code int, message string) { statusMessage := http.StatusText(code) if statusMessage == message { log.Print(c).Error(fmt.Sprintf("%d %v", code, statusMessage)) } else { log.Print(c).Error(fmt.Sprintf("%d %v", code, message)) } } func ResponseSuccess(c echo.Context, message string) error { var response ResSuccess response.Status = true response.Code = http.StatusOK if strings.TrimSpace(message) == "" { message = http.StatusText(response.Code) } response.Message = message logSuccess(c, response.Code, response.Message) return c.JSON(response.Code, response) } func ResponseSuccessWithData(c echo.Context, message string, data interface{}) error { var response ResSuccessWithData response.Status = true response.Code = http.StatusOK if strings.TrimSpace(message) == "" { message = http.StatusText(response.Code) } response.Message = message response.Data = data logSuccess(c, response.Code, response.Message) return c.JSON(response.Code, response) } func ResponseSuccessWithHTML(c echo.Context, html string) error { logSuccess(c, http.StatusOK, http.StatusText(http.StatusOK)) return c.HTML(http.StatusOK, html) } func ResponseCreated(c echo.Context, message string) error { var response ResSuccess response.Status = true response.Code = http.StatusCreated if strings.TrimSpace(message) == "" { message = http.StatusText(response.Code) } response.Message = message logSuccess(c, response.Code, response.Message) return c.JSON(response.Code, response) } func ResponseNoContent(c echo.Context) error { return c.NoContent(http.StatusNoContent) } func ResponseNotFound(c echo.Context, message string) error { var response ResError response.Status = false response.Code = http.StatusNotFound if strings.TrimSpace(message) == "" { message = http.StatusText(response.Code) } response.Error = message logError(c, response.Code, response.Error) return c.JSON(response.Code, response) } func ResponseAuthenticate(c echo.Context) error { c.Response().Header().Set("WWW-Authenticate", `Basic realm="Authentication Required"`) return ResponseUnauthorized(c, "") } func ResponseUnauthorized(c echo.Context, message string) error { var response ResError response.Status = false response.Code = http.StatusUnauthorized if strings.TrimSpace(message) == "" { message = http.StatusText(response.Code) } response.Error = message logError(c, response.Code, response.Error) return c.JSON(response.Code, response) } func ResponseBadRequest(c echo.Context, message string) error { var response ResError response.Status = false response.Code = http.StatusBadRequest if strings.TrimSpace(message) == "" { message = http.StatusText(response.Code) } response.Error = message logError(c, response.Code, response.Error) return c.JSON(response.Code, response) } func ResponseInternalError(c echo.Context, message string) error { var response ResError response.Status = false response.Code = http.StatusInternalServerError if strings.TrimSpace(message) == "" { message = http.StatusText(response.Code) } response.Error = message logError(c, response.Code, response.Error) return c.JSON(response.Code, response) } func ResponseBadGateway(c echo.Context, message string) error { var response ResError response.Status = false response.Code = http.StatusBadGateway if strings.TrimSpace(message) == "" { message = http.StatusText(response.Code) } response.Error = message logError(c, response.Code, response.Error) return c.JSON(response.Code, response) }