Aditya Siregar 9e95e8ee5e Init Eslogad
2025-08-09 15:09:43 +07:00

50 lines
1.3 KiB
Go

package util
import (
"encoding/json"
"eslogad-be/internal/constants"
"eslogad-be/internal/contract"
"eslogad-be/internal/logger"
"net/http"
"net/url"
)
func HandleResponse(w http.ResponseWriter, r *http.Request, response *contract.Response, methodName string) {
var statusCode int
if response.GetSuccess() {
statusCode = http.StatusOK
} else {
responseError := response.GetErrors()[0]
statusCode = MapErrorCodeToHttpStatus(responseError.GetCode())
}
WriteResponse(w, r, *response, statusCode, methodName)
}
func WriteResponse(w http.ResponseWriter, r *http.Request, resp contract.Response, statusCode int, methodName string) {
w.WriteHeader(statusCode)
response, err := json.Marshal(resp)
if err != nil {
logger.FromContext(r.Context()).Error(methodName, "unable to marshal json response", err)
}
_, err = w.Write(response)
if err != nil {
logger.FromContext(r.Context()).Error(methodName, "unable to write to response", err)
}
}
func MapErrorCodeToHttpStatus(code string) int {
statusCode := constants.HttpErrorMap[code]
if statusCode == 0 {
return http.StatusInternalServerError
}
return statusCode
}
func ExtractEndpointFromURL(requestURL string) string {
parsedURL, err := url.Parse(requestURL)
if err != nil {
return "/"
}
return parsedURL.Path
}