package httpapi import ( "net/http" "cloudipvalidator/internal/db" ) // Auto-cycle endpoints (see orchestrator/autocycle.go). Every endpoint // answers with the full autoCycleDTO so callers never need a follow-up GET. func toAutoCycleDTO(a db.AutoCycle) autoCycleDTO { return autoCycleDTO{ Enabled: a.Enabled, IntervalSeconds: a.IntervalSeconds, MaxRunSeconds: a.MaxRunSeconds, Phase: a.Phase, RunStartedAt: a.RunStartedAt, NextRunAt: a.NextRunAt, LastRunStartedAt: a.LastRunStartedAt, LastRunFinishedAt: a.LastRunFinishedAt, LastOutcome: a.LastOutcome, LastError: a.LastError, LastScannedFree: a.LastScannedFree, RunsTotal: a.RunsTotal, } } func (s *Server) respondAutoCycle(w http.ResponseWriter, r *http.Request) { ac, err := s.Orch.GetAutoCycle(r.Context()) if err != nil { writeDBError(w, err) return } writeJSON(w, http.StatusOK, toAutoCycleDTO(ac)) } func (s *Server) handleAdminGetAutoCycle(w http.ResponseWriter, r *http.Request) { s.respondAutoCycle(w, r) } func (s *Server) handleAdminPutAutoCycle(w http.ResponseWriter, r *http.Request) { var req putAutoCycleRequest if err := readJSON(r, &req); err != nil { writeError(w, http.StatusBadRequest, "invalid body: "+err.Error()) return } if err := s.DB.SetAutoCycleParams(r.Context(), req.IntervalSeconds, req.MaxRunSeconds); err != nil { writeDBError(w, err) return } s.respondAutoCycle(w, r) } func (s *Server) handleAdminStartAutoCycle(w http.ResponseWriter, r *http.Request) { if err := s.Orch.StartAutoCycle(r.Context()); err != nil { writeDBError(w, err) return } s.respondAutoCycle(w, r) } func (s *Server) handleAdminStopAutoCycle(w http.ResponseWriter, r *http.Request) { if err := s.Orch.StopAutoCycle(r.Context()); err != nil { writeDBError(w, err) return } s.respondAutoCycle(w, r) }