dukcapil/internal/util/http_util.go
Aditya Siregar bc64eb20ea add dukcapil
2026-05-07 04:01:32 +07:00

50 lines
1.3 KiB
Go

package util
import (
"encoding/json"
"go-backend-template/internal/constants"
"go-backend-template/internal/contract"
"go-backend-template/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
}