summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-04 08:44:59 +0300
committerPaul Buetow <paul@buetow.org>2026-05-04 08:44:59 +0300
commita1e4841504152af55d25a6b7a5c6c57a782d16b4 (patch)
tree95a5a2926a2b0f5bb29f0ad4295df7172b1c9e4a
parent384b41366936fc452a5fd47e23489ad4cac13ab2 (diff)
task f: validate media_id and sessionID in progress handler and service
-rw-r--r--internal/api/handlers_media.go7
-rw-r--r--internal/service/progress.go8
-rw-r--r--internal/service/progress_test.go12
3 files changed, 26 insertions, 1 deletions
diff --git a/internal/api/handlers_media.go b/internal/api/handlers_media.go
index c986eb3..c761bce 100644
--- a/internal/api/handlers_media.go
+++ b/internal/api/handlers_media.go
@@ -457,9 +457,14 @@ func (s *Server) handleProgress(w http.ResponseWriter, r *http.Request) {
writeJSON(w, http.StatusBadRequest, map[string]string{"error": "media_id required"})
return
}
+ sessionID := sessionIDFromContext(r)
+ if sessionID == "" {
+ writeJSON(w, http.StatusBadRequest, map[string]string{"error": "session required"})
+ return
+ }
err := s.progressSvc.UpdateProgress(
r.Context(),
- sessionIDFromContext(r),
+ sessionID,
userIDFromContext(r),
req.MediaID,
req.Position,
diff --git a/internal/service/progress.go b/internal/service/progress.go
index 8812c07..376ebb7 100644
--- a/internal/service/progress.go
+++ b/internal/service/progress.go
@@ -2,6 +2,7 @@ package service
import (
"context"
+ "errors"
"fmt"
"codeberg.org/snonux/player/internal/clock"
@@ -24,6 +25,13 @@ func NewProgressService(store repository.ProgressServiceStore, clk clock.Clock)
}
func (s *progressService) UpdateProgress(ctx context.Context, sessionID string, userID, mediaID int64, position float64) error {
+ if sessionID == "" {
+ return errors.New("session_id required")
+ }
+ if mediaID == 0 {
+ return errors.New("media_id required")
+ }
+
now := s.clock.Now()
if err := s.store.UpsertProgress(ctx, &model.PlaybackProgress{
diff --git a/internal/service/progress_test.go b/internal/service/progress_test.go
index 3b95c53..85eb1b3 100644
--- a/internal/service/progress_test.go
+++ b/internal/service/progress_test.go
@@ -9,6 +9,18 @@ import (
"codeberg.org/snonux/player/internal/repository"
)
+func TestProgressService_UpdateProgress_Validation(t *testing.T) {
+ ctx := context.Background()
+ svc := NewProgressService(&repository.MockStore{}, newMockClock())
+
+ if err := svc.UpdateProgress(ctx, "", 1, 10, 5); err == nil {
+ t.Fatal("expected error for empty sessionID")
+ }
+ if err := svc.UpdateProgress(ctx, "sess", 1, 0, 5); err == nil {
+ t.Fatal("expected error for mediaID=0")
+ }
+}
+
func TestProgressService_UpdateProgress(t *testing.T) {
ctx := context.Background()