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"))) } }