package api import ( "encoding/json" "net/http" "strconv" "debtik/internal/logging" ) func (s *Server) handleListServices(w http.ResponseWriter, r *http.Request) { if s.servicesMgr == nil { writeError(w, http.StatusServiceUnavailable, "services manager not configured") return } list := s.servicesMgr.ListServices() writeJSON(w, http.StatusOK, list) } func (s *Server) handleUpdateService(w http.ResponseWriter, r *http.Request) { if s.servicesMgr == nil { writeError(w, http.StatusServiceUnavailable, "services manager not configured") return } name := r.PathValue("name") var req struct { Port int `json:"port"` Disabled bool `json:"disabled"` Certificate string `json:"certificate"` Comment string `json:"comment"` } if err := json.NewDecoder(r.Body).Decode(&req); err != nil { writeError(w, http.StatusBadRequest, "invalid request body") return } if err := s.servicesMgr.SetService(name, req.Port, req.Disabled, req.Certificate); err != nil { writeError(w, http.StatusBadRequest, err.Error()) return } svc, _ := s.servicesMgr.GetService(name) writeJSON(w, http.StatusOK, svc) } func (s *Server) handleSetServiceState(w http.ResponseWriter, r *http.Request) { if s.servicesMgr == nil { writeError(w, http.StatusServiceUnavailable, "services manager not configured") return } name := r.PathValue("name") var req struct { Disabled bool `json:"disabled"` } if err := json.NewDecoder(r.Body).Decode(&req); err != nil { writeError(w, http.StatusBadRequest, "invalid request body") return } if err := s.servicesMgr.SetServiceState(name, req.Disabled); err != nil { writeError(w, http.StatusBadRequest, err.Error()) return } svc, _ := s.servicesMgr.GetService(name) writeJSON(w, http.StatusOK, svc) } func (s *Server) handleListLogs(w http.ResponseWriter, r *http.Request) { limit := 100 if lStr := r.URL.Query().Get("limit"); lStr != "" { if lVal, err := strconv.Atoi(lStr); err == nil && lVal > 0 { limit = lVal } } filter := r.URL.Query().Get("filter") if filter == "" { filter = r.URL.Query().Get("where") } logger := logging.GetLogger() logs := logger.List(limit, filter) writeJSON(w, http.StatusOK, map[string]any{ "total": len(logs), "logs": logs, }) }