summaryrefslogtreecommitdiff
path: root/player-server/internal/api/handlers.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-19 19:23:50 +0300
committerPaul Buetow <paul@buetow.org>2026-05-19 19:23:50 +0300
commit3779053951f338076fcc448daf9bee9ada18cf54 (patch)
tree50bbb2ccb68d9eab90b0ffdd5897560daec0bd17 /player-server/internal/api/handlers.go
parent3ce06a482fafd884013c9a7a827d9ccb183a05da (diff)
Remove nil streamer fallback in api.serveFileResult (DIP)
The serveFileResult handler used to fabricate a default MediaStreamer at request time when s.streamer was nil. That silently masked wiring mistakes and violated the Dependency Inversion Principle — the handler was inventing its own dependency instead of demanding one from the caller. Removed the fallback so the handler now uses s.streamer directly. Construction-time validation of deps.MediaStreamer was added to api.NewServerWithLogger in commit 4215db6, which makes the runtime nil case unreachable. Mirrors the explicit-deps pattern set in commits 622827c (http.Client in podcast service) and 92edb83 (TokenManager in auth service). Test helpers updated to inject a service.NewMediaStreamer(nil) when one isn't otherwise supplied so the existing suite still constructs Servers through the validating constructor. Refs agent task 6a. Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
Diffstat (limited to 'player-server/internal/api/handlers.go')
-rw-r--r--player-server/internal/api/handlers.go8
1 files changed, 5 insertions, 3 deletions
diff --git a/player-server/internal/api/handlers.go b/player-server/internal/api/handlers.go
index a9c832f..f04ec19 100644
--- a/player-server/internal/api/handlers.go
+++ b/player-server/internal/api/handlers.go
@@ -162,10 +162,12 @@ func (s *Server) serveDetach(w http.ResponseWriter, r *http.Request) {
// ------------------------------------------------------------------
func (s *Server) serveFileResult(w http.ResponseWriter, r *http.Request, res *service.FileResult, attachment bool) {
+ // s.streamer is required at construction time (see NewServerWithLogger),
+ // so it is guaranteed non-nil here. We previously fell back to a default
+ // streamer when nil, which silently hid wiring mistakes and violated the
+ // Dependency Inversion Principle by letting the handler decide its own
+ // dependency.
streamer := s.streamer
- if streamer == nil {
- streamer = service.NewMediaStreamer(nil)
- }
stream, err := streamer.Open(r.Context(), res, attachment)
if err != nil {