49 lines
1.1 KiB
Go
49 lines
1.1 KiB
Go
package api
|
|
|
|
import (
|
|
"net/http"
|
|
|
|
"reanimator/internal/repository/failures"
|
|
)
|
|
|
|
type FailureDependencies struct {
|
|
Failures *failures.FailureRepository
|
|
}
|
|
|
|
type failureHandlers struct {
|
|
deps FailureDependencies
|
|
}
|
|
|
|
func RegisterFailureRoutes(mux *http.ServeMux, deps FailureDependencies) {
|
|
h := failureHandlers{deps: deps}
|
|
mux.HandleFunc("/failures", h.handleFailures)
|
|
}
|
|
|
|
func (h failureHandlers) handleFailures(w http.ResponseWriter, r *http.Request) {
|
|
if r.Method != http.MethodGet {
|
|
w.WriteHeader(http.StatusMethodNotAllowed)
|
|
return
|
|
}
|
|
if h.deps.Failures == nil {
|
|
writeError(w, http.StatusInternalServerError, "failures unavailable")
|
|
return
|
|
}
|
|
|
|
limit := 200
|
|
if raw := r.URL.Query().Get("limit"); raw != "" {
|
|
parsed, err := parseIntParam(raw)
|
|
if err != nil || parsed <= 0 {
|
|
writeError(w, http.StatusBadRequest, "limit must be a positive integer")
|
|
return
|
|
}
|
|
limit = parsed
|
|
}
|
|
|
|
items, err := h.deps.Failures.ListAll(r.Context(), limit)
|
|
if err != nil {
|
|
writeError(w, http.StatusInternalServerError, "list failures failed")
|
|
return
|
|
}
|
|
writeJSON(w, http.StatusOK, map[string]any{"items": items})
|
|
}
|