Files
koin_ping_0.2.0/backend-go/internal/handlers/alert_event.go
2026-02-27 17:33:40 -05:00

49 lines
1.2 KiB
Go

package handlers
import (
"log"
"net/http"
"strconv"
"github.com/kjannette/koin-ping/backend-go/internal/middleware"
"github.com/kjannette/koin-ping/backend-go/internal/models"
)
type AlertEventHandler struct {
alertEvents *models.AlertEventModel
}
func NewAlertEventHandler(alertEvents *models.AlertEventModel) *AlertEventHandler {
return &AlertEventHandler{alertEvents: alertEvents}
}
func (h *AlertEventHandler) List(w http.ResponseWriter, r *http.Request) {
userID := middleware.GetUserID(r.Context())
limitStr := r.URL.Query().Get("limit")
limit := 20
if limitStr != "" {
if n, err := strconv.Atoi(limitStr); err == nil {
limit = n
}
}
log.Printf("User %s listing alert events (limit: %d)", userID, limit)
if limit < 1 || limit > 100 {
writeError(w, http.StatusBadRequest, "VALIDATION_ERROR", "Limit must be between 1 and 100")
return
}
events, err := h.alertEvents.ListRecentByUser(r.Context(), userID, limit)
if err != nil {
log.Printf("Error listing alert events: %v", err)
writeError(w, http.StatusInternalServerError, "INTERNAL_ERROR", "Failed to list alert events")
return
}
log.Printf("Found %d alert events for user", len(events))
writeJSON(w, http.StatusOK, events)
}