Some checks failed
Build Docker Image / Build-Docker-Image (push) Has been cancelled
47 lines
1.3 KiB
Go
47 lines
1.3 KiB
Go
package handler
|
|
|
|
import (
|
|
"errors"
|
|
"net/http"
|
|
"spend-sparrow/internal/db"
|
|
"spend-sparrow/internal/service"
|
|
"spend-sparrow/internal/utils"
|
|
"strings"
|
|
|
|
"go.opentelemetry.io/otel/attribute"
|
|
"go.opentelemetry.io/otel/trace"
|
|
)
|
|
|
|
func handleError(w http.ResponseWriter, r *http.Request, err error) {
|
|
switch {
|
|
case errors.Is(err, service.ErrUnauthorized):
|
|
utils.TriggerToastWithStatus(w, r, "error", "You are not autorized to perform this operation.", http.StatusUnauthorized)
|
|
return
|
|
case errors.Is(err, service.ErrBadRequest):
|
|
utils.TriggerToastWithStatus(w, r, "error", extractErrorMessage(err), http.StatusBadRequest)
|
|
return
|
|
case errors.Is(err, db.ErrNotFound):
|
|
utils.TriggerToastWithStatus(w, r, "error", extractErrorMessage(err), http.StatusNotFound)
|
|
return
|
|
}
|
|
|
|
utils.TriggerToastWithStatus(w, r, "error", "Internal Server Error", http.StatusInternalServerError)
|
|
}
|
|
|
|
func extractErrorMessage(err error) string {
|
|
errMsg := err.Error()
|
|
if errMsg == "" {
|
|
return ""
|
|
}
|
|
|
|
return strings.SplitN(errMsg, ":", 2)[0]
|
|
}
|
|
|
|
func updateSpan(r *http.Request) {
|
|
currentSpan := trace.SpanFromContext(r.Context())
|
|
if currentSpan != nil {
|
|
currentSpan.SetAttributes(attribute.String("http.pattern", r.Pattern))
|
|
currentSpan.SetAttributes(attribute.String("http.pattern.id", r.PathValue("id")))
|
|
}
|
|
}
|