receipt_indexer/backend/cmd/api/errors.go
2025-04-30 20:59:28 -04:00

58 lines
2.2 KiB
Go

package main
import (
"net/http"
)
func (app *application) internalServerError(w http.ResponseWriter, r *http.Request, err error) {
app.logger.Error("internal error", "method", r.Method, "path", r.URL.Path, "error", err.Error())
writeJSONError(w, http.StatusInternalServerError, "the server encountered a problem")
}
func (app *application) forbiddenResponse(w http.ResponseWriter, r *http.Request) {
app.logger.Warn("forbidden", "method", r.Method, "path", r.URL.Path, "error")
writeJSONError(w, http.StatusForbidden, "forbidden")
}
func (app *application) badRequestResponse(w http.ResponseWriter, r *http.Request, err error) {
app.logger.Warn("bad request", "method", r.Method, "path", r.URL.Path, "error", err.Error())
writeJSONError(w, http.StatusBadRequest, err.Error())
}
func (app *application) conflictResponse(w http.ResponseWriter, r *http.Request, err error) {
app.logger.Error("conflict response", "method", r.Method, "path", r.URL.Path, "error", err.Error())
writeJSONError(w, http.StatusConflict, err.Error())
}
func (app *application) notFoundResponse(w http.ResponseWriter, r *http.Request, err error) {
app.logger.Warn("not found error", "method", r.Method, "path", r.URL.Path, "error", err.Error())
writeJSONError(w, http.StatusNotFound, "not found")
}
func (app *application) unauthorizedErrorResponse(w http.ResponseWriter, r *http.Request, err error) {
app.logger.Warn("unauthorized error", "method", r.Method, "path", r.URL.Path, "error", err.Error())
writeJSONError(w, http.StatusUnauthorized, "unauthorized")
}
func (app *application) unauthorizedBasicErrorResponse(w http.ResponseWriter, r *http.Request, err error) {
app.logger.Warn("unauthorized basic error", "method", r.Method, "path", r.URL.Path, "error", err.Error())
w.Header().Set("WWW-Authenticate", `Basic realm="restricted", charset="UTF-8"`)
writeJSONError(w, http.StatusUnauthorized, "unauthorized")
}
func (app *application) rateLimitExceededResponse(w http.ResponseWriter, r *http.Request, retryAfter string) {
app.logger.Warn("rate limit exceeded", "method", r.Method, "path", r.URL.Path)
w.Header().Set("Retry-After", retryAfter)
writeJSONError(w, http.StatusTooManyRequests, "rate limit exceeded, retry after: "+retryAfter)
}