diff options
| author | Paul Buetow <paul@buetow.org> | 2026-05-04 00:10:32 +0300 |
|---|---|---|
| committer | Paul Buetow <paul@buetow.org> | 2026-05-04 00:10:32 +0300 |
| commit | c68c54b0212ebc8d111b11c6edff82942c3a4463 (patch) | |
| tree | faab06668883d4977aebe4885d61cb0e00644009 /internal/api/server.go | |
| parent | 2774c4706214be226d822ab296ac062f5212f740 (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.go | 32 |
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, |
