aboutsummaryrefslogtreecommitdiff
path: root/backend/internal/api/handler.go
diff options
context:
space:
mode:
authorzwlucas <lucas.fariamo08@gmail.com>2026-05-29 20:21:48 +0000
committerzwlucas <lucas.fariamo08@gmail.com>2026-05-29 20:21:48 +0000
commitd186a989b6808ff39fcd43a9f0b478aebc4aa346 (patch)
treeabf32684ea56e6066d8584e0378227ffc397ace2 /backend/internal/api/handler.go
parent6cc0bfd1d79074df790272b8091b1f0226d14283 (diff)
downloadyaum-d186a989b6808ff39fcd43a9f0b478aebc4aa346.tar.gz
yaum-d186a989b6808ff39fcd43a9f0b478aebc4aa346.zip
feat: enhance maintenance management and heartbeat history features
- Updated Store interface to include methods for managing maintenances. - Modified API functions to support pagination for heartbeat history and added CRUD operations for maintenances. - Enhanced types to include paginated responses and initial log entries. - Implemented maintenance management UI in the admin panel with create, edit, and delete functionalities. - Updated service detail page to display paginated heartbeat history and improved chart rendering. - Refactored status page to accommodate new data structures and ensure consistent data handling. Signed-off-by: Lucas Faria Mendes <lucas.fariamo08@gmail.com>
Diffstat (limited to 'backend/internal/api/handler.go')
-rw-r--r--backend/internal/api/handler.go91
1 files changed, 89 insertions, 2 deletions
diff --git a/backend/internal/api/handler.go b/backend/internal/api/handler.go
index f304351..5f934da 100644
--- a/backend/internal/api/handler.go
+++ b/backend/internal/api/handler.go
@@ -142,12 +142,40 @@ func (h *Handler) GetHistory(w http.ResponseWriter, r *http.Request) {
writeJSON(w, http.StatusBadRequest, map[string]string{"error": "id invalido"})
return
}
- history, err := h.store.GetHistory(id, 50)
+
+ page, _ := strconv.Atoi(r.URL.Query().Get("page"))
+ if page < 1 {
+ page = 1
+ }
+ perPage, _ := strconv.Atoi(r.URL.Query().Get("per_page"))
+ if perPage < 1 || perPage > 100 {
+ perPage = 50
+ }
+
+ offset := (page - 1) * perPage
+ history, err := h.store.GetHistory(id, perPage, offset)
if err != nil {
writeJSON(w, http.StatusInternalServerError, map[string]string{"error": err.Error()})
return
}
- writeJSON(w, http.StatusOK, history)
+
+ total, err := h.store.CountHeartbeats(id)
+ if err != nil {
+ total = len(history)
+ }
+
+ totalPages := (total + perPage - 1) / perPage
+ if totalPages < 1 {
+ totalPages = 1
+ }
+
+ writeJSON(w, http.StatusOK, map[string]any{
+ "data": history,
+ "page": page,
+ "per_page": perPage,
+ "total": total,
+ "total_pages": totalPages,
+ })
}
func (h *Handler) GetActiveMaintenance(w http.ResponseWriter, r *http.Request) {
@@ -163,6 +191,65 @@ func (h *Handler) GetActiveMaintenance(w http.ResponseWriter, r *http.Request) {
writeJSON(w, http.StatusOK, map[string]any{"maintenance": m})
}
+func (h *Handler) ListMaintenances(w http.ResponseWriter, r *http.Request) {
+ maintenances, err := h.store.ListMaintenances()
+ if err != nil {
+ writeJSON(w, http.StatusInternalServerError, map[string]string{"error": err.Error()})
+ return
+ }
+ writeJSON(w, http.StatusOK, maintenances)
+}
+
+func (h *Handler) CreateMaintenance(w http.ResponseWriter, r *http.Request) {
+ var m model.Maintenance
+ if err := json.NewDecoder(r.Body).Decode(&m); err != nil {
+ writeJSON(w, http.StatusBadRequest, map[string]string{"error": "json invalido: " + err.Error()})
+ return
+ }
+ if m.Title == "" {
+ writeJSON(w, http.StatusBadRequest, map[string]string{"error": "titulo obrigatorio"})
+ return
+ }
+ created, err := h.store.AddMaintenance(m)
+ if err != nil {
+ writeJSON(w, http.StatusInternalServerError, map[string]string{"error": err.Error()})
+ return
+ }
+ writeJSON(w, http.StatusCreated, created)
+}
+
+func (h *Handler) UpdateMaintenance(w http.ResponseWriter, r *http.Request) {
+ id, err := strconv.Atoi(r.PathValue("id"))
+ if err != nil {
+ writeJSON(w, http.StatusBadRequest, map[string]string{"error": "id invalido"})
+ return
+ }
+ var m model.Maintenance
+ if err := json.NewDecoder(r.Body).Decode(&m); err != nil {
+ writeJSON(w, http.StatusBadRequest, map[string]string{"error": "json invalido: " + err.Error()})
+ return
+ }
+ updated, err := h.store.UpdateMaintenance(id, m)
+ if err != nil {
+ writeJSON(w, http.StatusInternalServerError, map[string]string{"error": err.Error()})
+ return
+ }
+ writeJSON(w, http.StatusOK, updated)
+}
+
+func (h *Handler) DeleteMaintenance(w http.ResponseWriter, r *http.Request) {
+ id, err := strconv.Atoi(r.PathValue("id"))
+ if err != nil {
+ writeJSON(w, http.StatusBadRequest, map[string]string{"error": "id invalido"})
+ return
+ }
+ if err := h.store.DeleteMaintenance(id); err != nil {
+ writeJSON(w, http.StatusNotFound, map[string]string{"error": err.Error()})
+ return
+ }
+ w.WriteHeader(http.StatusNoContent)
+}
+
func (h *Handler) BadgeSVG(w http.ResponseWriter, r *http.Request) {
id, err := strconv.Atoi(r.PathValue("id"))
if err != nil {