summaryrefslogtreecommitdiff
path: root/internal/api/server.go
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-04 00:10:32 +0300
committerPaul Buetow <paul@buetow.org>2026-05-04 00:10:32 +0300
commitc68c54b0212ebc8d111b11c6edff82942c3a4463 (patch)
treefaab06668883d4977aebe4885d61cb0e00644009 /internal/api/server.go
parent2774c4706214be226d822ab296ac062f5212f740 (diff)
task 6: narrow service interfaces in Server and Middleware
Split Server struct to accept narrow service interfaces instead of fat composites (MediaService, AdminService). Each handler now depends only on its specific slice (MediaBrowseService, MediaWriteService, etc.). Split Middleware to depend on a narrow UserStore interface instead of full repository.Store. Updated all constructors, call sites, and tests. Added negative tests for nil AdminService and ProgressService returning 501 Not Implemented. References task 6.
Diffstat (limited to 'internal/api/server.go')
-rw-r--r--internal/api/server.go32
1 files changed, 26 insertions, 6 deletions
diff --git a/internal/api/server.go b/internal/api/server.go
index f934a56..87e2471 100644
--- a/internal/api/server.go
+++ b/internal/api/server.go
@@ -21,7 +21,12 @@ type Server struct {
sm *auth.SessionManager
cfg *internal.Config
mux *http.ServeMux
- mediaSvc service.MediaService
+ browseSvc service.MediaBrowseService
+ writeSvc service.MediaWriteService
+ shareSvc service.MediaShareService
+ tagSvc service.MediaTagService
+ favSvc service.MediaFavoriteService
+ noteSvc service.MediaNoteService
adminSvc service.AdminService
progressSvc service.ProgressService
authSvc service.AuthService
@@ -32,20 +37,25 @@ type Server struct {
}
// NewServer creates a Server with routes.
-// If mediaSvc, adminSvc, progressSvc, or authSvc are nil, their respective routes return 501.
+// If any service argument is nil, its respective routes return 501.
func NewServer(
store repository.Store,
hasher auth.Hasher,
sm *auth.SessionManager,
cfg *internal.Config,
- mediaSvc service.MediaService,
+ browseSvc service.MediaBrowseService,
+ writeSvc service.MediaWriteService,
+ shareSvc service.MediaShareService,
+ tagSvc service.MediaTagService,
+ favSvc service.MediaFavoriteService,
+ noteSvc service.MediaNoteService,
adminSvc service.AdminService,
progressSvc service.ProgressService,
authSvc service.AuthService,
staticFS http.FileSystem,
remuxer probe.Remuxer,
) *Server {
- return NewServerWithLogger(store, hasher, sm, cfg, mediaSvc, adminSvc, progressSvc, authSvc, staticFS, remuxer, slog.Default())
+ return NewServerWithLogger(store, hasher, sm, cfg, browseSvc, writeSvc, shareSvc, tagSvc, favSvc, noteSvc, adminSvc, progressSvc, authSvc, staticFS, remuxer, slog.Default())
}
// NewServerWithLogger creates a Server with routes and an injected logger.
@@ -54,7 +64,12 @@ func NewServerWithLogger(
hasher auth.Hasher,
sm *auth.SessionManager,
cfg *internal.Config,
- mediaSvc service.MediaService,
+ browseSvc service.MediaBrowseService,
+ writeSvc service.MediaWriteService,
+ shareSvc service.MediaShareService,
+ tagSvc service.MediaTagService,
+ favSvc service.MediaFavoriteService,
+ noteSvc service.MediaNoteService,
adminSvc service.AdminService,
progressSvc service.ProgressService,
authSvc service.AuthService,
@@ -74,7 +89,12 @@ func NewServerWithLogger(
sm: sm,
cfg: cfg,
mux: http.NewServeMux(),
- mediaSvc: mediaSvc,
+ browseSvc: browseSvc,
+ writeSvc: writeSvc,
+ shareSvc: shareSvc,
+ tagSvc: tagSvc,
+ favSvc: favSvc,
+ noteSvc: noteSvc,
adminSvc: adminSvc,
progressSvc: progressSvc,
authSvc: authSvc,