| 1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556 |
- package handler
- import (
- "net/http"
- ddnscron "goflare/internal/cron"
- "goflare/internal/database/queries"
- "github.com/labstack/echo/v4"
- )
- type SettingsHandler struct {
- q *queries.Queries
- updater *ddnscron.DDNSUpdater
- }
- func NewSettingsHandler(q *queries.Queries, updater *ddnscron.DDNSUpdater) *SettingsHandler {
- return &SettingsHandler{q: q, updater: updater}
- }
- type settingsResponse struct {
- CronSchedule string `json:"cron_schedule"`
- }
- type settingsRequest struct {
- CronSchedule string `json:"cron_schedule"`
- }
- func (h *SettingsHandler) Get(c echo.Context) error {
- schedule := h.updater.Schedule()
- return c.JSON(http.StatusOK, settingsResponse{CronSchedule: schedule})
- }
- func (h *SettingsHandler) Update(c echo.Context) error {
- var req settingsRequest
- if err := c.Bind(&req); err != nil {
- return c.JSON(http.StatusBadRequest, map[string]string{"error": "invalid request body"})
- }
- if req.CronSchedule == "" {
- return c.JSON(http.StatusBadRequest, map[string]string{"error": "cron_schedule is required"})
- }
- if err := h.updater.Reschedule(req.CronSchedule); err != nil {
- return c.JSON(http.StatusBadRequest, map[string]string{"error": err.Error()})
- }
- ctx := c.Request().Context()
- if err := h.q.UpsertSetting(ctx, queries.UpsertSettingParams{
- Key: "cron_schedule",
- Value: req.CronSchedule,
- }); err != nil {
- return c.JSON(http.StatusInternalServerError, map[string]string{"error": "failed to save setting"})
- }
- return c.JSON(http.StatusOK, settingsResponse{CronSchedule: req.CronSchedule})
- }
|