From fc5587c1713077316192feef20b66b6de4f24eaf Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Jesko=20Ansch=C3=BCtz?= Date: Fri, 27 Mar 2026 07:21:01 +0100 Subject: [PATCH] fix: Zeitformat-Validierung + pgx.ErrNoRows in ScreenScheduleStore.Get Co-Authored-By: Claude Sonnet 4.6 --- server/backend/internal/httpapi/manage/schedule.go | 13 +++++++++++++ server/backend/internal/store/store.go | 6 +++++- 2 files changed, 18 insertions(+), 1 deletion(-) diff --git a/server/backend/internal/httpapi/manage/schedule.go b/server/backend/internal/httpapi/manage/schedule.go index acc8442..15fcdd3 100644 --- a/server/backend/internal/httpapi/manage/schedule.go +++ b/server/backend/internal/httpapi/manage/schedule.go @@ -3,6 +3,7 @@ package manage import ( "encoding/json" "net/http" + "time" "git.az-it.net/az/morz-infoboard/server/backend/internal/store" ) @@ -30,6 +31,18 @@ func HandleUpdateSchedule(screens *store.ScreenStore, schedules *store.ScreenSch http.Error(w, "invalid JSON", http.StatusBadRequest) return } + if body.PowerOnTime != "" { + if _, err := time.Parse("15:04", body.PowerOnTime); err != nil { + http.Error(w, "invalid power_on_time format (use HH:MM)", http.StatusBadRequest) + return + } + } + if body.PowerOffTime != "" { + if _, err := time.Parse("15:04", body.PowerOffTime); err != nil { + http.Error(w, "invalid power_off_time format (use HH:MM)", http.StatusBadRequest) + return + } + } if err := schedules.Upsert(r.Context(), &store.ScreenSchedule{ ScreenID: screen.ID, diff --git a/server/backend/internal/store/store.go b/server/backend/internal/store/store.go index 1ad958b..9435e90 100644 --- a/server/backend/internal/store/store.go +++ b/server/backend/internal/store/store.go @@ -7,6 +7,7 @@ import ( "fmt" "time" + "github.com/jackc/pgx/v5" "github.com/jackc/pgx/v5/pgxpool" ) @@ -653,9 +654,12 @@ func (s *ScreenScheduleStore) Get(ctx context.Context, screenID string) (*Screen `select screen_id, schedule_enabled, power_on_time, power_off_time from screen_schedules where screen_id = $1`, screenID). Scan(&sc.ScreenID, &sc.ScheduleEnabled, &sc.PowerOnTime, &sc.PowerOffTime) - if err != nil { + if errors.Is(err, pgx.ErrNoRows) { return &ScreenSchedule{ScreenID: screenID}, nil } + if err != nil { + return nil, err + } return &sc, nil }