summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-10 09:54:50 +0300
committerPaul Buetow <paul@buetow.org>2026-05-10 09:54:50 +0300
commit0af2b2bc97275b5b6168cb91dabfe30d89bd5d07 (patch)
tree6566fc510522cf4256f8a4b5dd1b755e5f59b910
parent1ccd9b0fafad95b25dd6c6b806cad4809cefafe1 (diff)
refactor(service,scanner): return concrete types from constructors
Apply the Go best-practice convention 'accept interfaces, return concrete types' across the service and scanner packages: - NewBrowseService -> *browseService - NewWriteService -> *writeService - NewMediaStreamer -> *mediaStreamer - NewFSScanner -> *FSScanner - NewFSScannerWithLogger -> *FSScanner - NewPodcastBrowseService -> *podcastBrowseService - NewTagService -> *tagService - NewShareService -> *shareService - NewProgressService -> *progressService - NewAdminService -> *adminService - NewAdminServiceWithLogger -> *adminService - NewAuthService -> *authService - NewNoteService -> *noteService - NewFavService -> *favService - NewMediaService -> *mediaService - NewMediaServiceWithPodcastBrowser -> *mediaService Callers continue to work unchanged because Go allows assigning a concrete type to an interface variable. All tests pass with -race -cover.
-rw-r--r--internal/scanner/scanner.go4
-rw-r--r--internal/service/admin.go4
-rw-r--r--internal/service/auth.go2
-rw-r--r--internal/service/browse.go4
-rw-r--r--internal/service/fav.go2
-rw-r--r--internal/service/media.go4
-rw-r--r--internal/service/note.go2
-rw-r--r--internal/service/progress.go2
-rw-r--r--internal/service/share.go2
-rw-r--r--internal/service/streamer.go2
-rw-r--r--internal/service/tag.go2
-rw-r--r--internal/service/write.go2
12 files changed, 16 insertions, 16 deletions
diff --git a/internal/scanner/scanner.go b/internal/scanner/scanner.go
index d1e50ba..15a4949 100644
--- a/internal/scanner/scanner.go
+++ b/internal/scanner/scanner.go
@@ -38,12 +38,12 @@ type FSScanner struct {
}
// NewFSScanner creates a filesystem scanner with injected dependencies.
-func NewFSScanner(store repository.ScannerStore, prober probe.Prober, thumbGen thumb.Generator, clk clock.Clock, mediaRoot string) Scanner {
+func NewFSScanner(store repository.ScannerStore, prober probe.Prober, thumbGen thumb.Generator, clk clock.Clock, mediaRoot string) *FSScanner {
return NewFSScannerWithLogger(store, prober, thumbGen, clk, mediaRoot, slog.Default())
}
// NewFSScannerWithLogger creates a filesystem scanner with an injected logger.
-func NewFSScannerWithLogger(store repository.ScannerStore, prober probe.Prober, thumbGen thumb.Generator, clk clock.Clock, mediaRoot string, logger *slog.Logger) Scanner {
+func NewFSScannerWithLogger(store repository.ScannerStore, prober probe.Prober, thumbGen thumb.Generator, clk clock.Clock, mediaRoot string, logger *slog.Logger) *FSScanner {
if logger == nil {
logger = slog.Default()
}
diff --git a/internal/service/admin.go b/internal/service/admin.go
index 11406b8..1b1a352 100644
--- a/internal/service/admin.go
+++ b/internal/service/admin.go
@@ -21,12 +21,12 @@ type adminService struct {
}
// NewAdminService creates a concrete AdminService.
-func NewAdminService(store repository.AdminServiceStore, clk clock.Clock, hasher auth.Hasher, sc scanner.Scanner, mediaRoot string, appCtx context.Context) AdminService {
+func NewAdminService(store repository.AdminServiceStore, clk clock.Clock, hasher auth.Hasher, sc scanner.Scanner, mediaRoot string, appCtx context.Context) *adminService {
return NewAdminServiceWithLogger(store, clk, hasher, sc, mediaRoot, appCtx, slog.Default())
}
// NewAdminServiceWithLogger creates a concrete AdminService with an injected logger.
-func NewAdminServiceWithLogger(store repository.AdminServiceStore, clk clock.Clock, hasher auth.Hasher, sc scanner.Scanner, mediaRoot string, appCtx context.Context, logger *slog.Logger) AdminService {
+func NewAdminServiceWithLogger(store repository.AdminServiceStore, clk clock.Clock, hasher auth.Hasher, sc scanner.Scanner, mediaRoot string, appCtx context.Context, logger *slog.Logger) *adminService {
return &adminService{
trashService: NewTrashService(store),
scanService: NewScanService(appCtx, sc, mediaRoot, clk, logger),
diff --git a/internal/service/auth.go b/internal/service/auth.go
index b5f2720..56210b2 100644
--- a/internal/service/auth.go
+++ b/internal/service/auth.go
@@ -19,7 +19,7 @@ type authService struct {
}
// NewAuthService creates a concrete AuthService.
-func NewAuthService(store repository.AuthServiceStore, clk clock.Clock, hasher auth.Hasher, sm auth.SessionManager) AuthService {
+func NewAuthService(store repository.AuthServiceStore, clk clock.Clock, hasher auth.Hasher, sm auth.SessionManager) *authService {
return &authService{
store: store,
clock: clk,
diff --git a/internal/service/browse.go b/internal/service/browse.go
index 4f70717..6308e1a 100644
--- a/internal/service/browse.go
+++ b/internal/service/browse.go
@@ -36,7 +36,7 @@ type podcastBrowseService struct {
}
// NewPodcastBrowseService creates a PodcastBrowser backed by a PodcastRepo.
-func NewPodcastBrowseService(store repository.PodcastRepo, mediaRoot string) PodcastBrowser {
+func NewPodcastBrowseService(store repository.PodcastRepo, mediaRoot string) *podcastBrowseService {
return &podcastBrowseService{store: store, mediaRoot: mediaRoot}
}
@@ -77,7 +77,7 @@ func (p *podcastBrowseService) AugmentBrowseSet(ctx context.Context, result *Bro
}
// NewBrowseService creates a BrowseService.
-func NewBrowseService(store repository.BrowseServiceStore, clk clock.Clock, mediaRoot string, helper *accessHelper, browser PodcastBrowser) MediaBrowseService {
+func NewBrowseService(store repository.BrowseServiceStore, clk clock.Clock, mediaRoot string, helper *accessHelper, browser PodcastBrowser) *browseService {
return &browseService{
store: store,
clock: clk,
diff --git a/internal/service/fav.go b/internal/service/fav.go
index 57dcb73..e8b8ab9 100644
--- a/internal/service/fav.go
+++ b/internal/service/fav.go
@@ -13,7 +13,7 @@ type favService struct {
}
// NewFavService creates a FavService.
-func NewFavService(store repository.FavoriteServiceStore, helper *accessHelper) MediaFavoriteService {
+func NewFavService(store repository.FavoriteServiceStore, helper *accessHelper) *favService {
return &favService{
store: store,
helper: helper,
diff --git a/internal/service/media.go b/internal/service/media.go
index 4fea78c..38c670f 100644
--- a/internal/service/media.go
+++ b/internal/service/media.go
@@ -29,12 +29,12 @@ type mediaService struct {
}
// NewMediaService creates a concrete MediaService by wiring role-focused sub-services.
-func NewMediaService(store repository.MediaServiceStore, clk clock.Clock, mediaRoot string, thumbGen thumb.Generator, prober probe.Prober) MediaService {
+func NewMediaService(store repository.MediaServiceStore, clk clock.Clock, mediaRoot string, thumbGen thumb.Generator, prober probe.Prober) *mediaService {
return NewMediaServiceWithPodcastBrowser(store, clk, mediaRoot, thumbGen, prober, nil)
}
// NewMediaServiceWithPodcastBrowser creates a MediaService with an optional PodcastBrowser.
-func NewMediaServiceWithPodcastBrowser(store repository.MediaServiceStore, clk clock.Clock, mediaRoot string, thumbGen thumb.Generator, prober probe.Prober, browser PodcastBrowser) MediaService {
+func NewMediaServiceWithPodcastBrowser(store repository.MediaServiceStore, clk clock.Clock, mediaRoot string, thumbGen thumb.Generator, prober probe.Prober, browser PodcastBrowser) *mediaService {
helper := &accessHelper{store: store}
return &mediaService{
MediaBrowseService: NewBrowseService(store, clk, mediaRoot, helper, browser),
diff --git a/internal/service/note.go b/internal/service/note.go
index da7f923..56409d6 100644
--- a/internal/service/note.go
+++ b/internal/service/note.go
@@ -16,7 +16,7 @@ type noteService struct {
}
// NewNoteService creates a NoteService.
-func NewNoteService(store repository.NoteServiceStore, clk clock.Clock, helper *accessHelper) MediaNoteService {
+func NewNoteService(store repository.NoteServiceStore, clk clock.Clock, helper *accessHelper) *noteService {
return &noteService{
store: store,
clock: clk,
diff --git a/internal/service/progress.go b/internal/service/progress.go
index 376ebb7..ef248cf 100644
--- a/internal/service/progress.go
+++ b/internal/service/progress.go
@@ -17,7 +17,7 @@ type progressService struct {
}
// NewProgressService creates a concrete ProgressService.
-func NewProgressService(store repository.ProgressServiceStore, clk clock.Clock) ProgressService {
+func NewProgressService(store repository.ProgressServiceStore, clk clock.Clock) *progressService {
return &progressService{
store: store,
clock: clk,
diff --git a/internal/service/share.go b/internal/service/share.go
index 9032f8c..9552031 100644
--- a/internal/service/share.go
+++ b/internal/service/share.go
@@ -22,7 +22,7 @@ type shareService struct {
}
// NewShareService creates a ShareService.
-func NewShareService(store repository.ShareServiceStore, clk clock.Clock, helper *accessHelper) MediaShareService {
+func NewShareService(store repository.ShareServiceStore, clk clock.Clock, helper *accessHelper) *shareService {
return &shareService{
store: store,
clock: clk,
diff --git a/internal/service/streamer.go b/internal/service/streamer.go
index e04293e..a0c09b0 100644
--- a/internal/service/streamer.go
+++ b/internal/service/streamer.go
@@ -16,7 +16,7 @@ type mediaStreamer struct {
}
// NewMediaStreamer creates the default service for preparing media files for HTTP streaming.
-func NewMediaStreamer(remuxer probe.Remuxer) MediaStreamer {
+func NewMediaStreamer(remuxer probe.Remuxer) *mediaStreamer {
return &mediaStreamer{remuxer: remuxer}
}
diff --git a/internal/service/tag.go b/internal/service/tag.go
index d08c387..88e19b6 100644
--- a/internal/service/tag.go
+++ b/internal/service/tag.go
@@ -16,7 +16,7 @@ type tagService struct {
}
// NewTagService creates a TagService.
-func NewTagService(store repository.TagServiceStore, helper *accessHelper) MediaTagService {
+func NewTagService(store repository.TagServiceStore, helper *accessHelper) *tagService {
return &tagService{
store: store,
helper: helper,
diff --git a/internal/service/write.go b/internal/service/write.go
index 8508951..f2f5080 100644
--- a/internal/service/write.go
+++ b/internal/service/write.go
@@ -29,7 +29,7 @@ type writeService struct {
}
// NewWriteService creates a WriteService.
-func NewWriteService(store repository.WriteServiceStore, clk clock.Clock, mediaRoot string, thumbGen thumb.Generator, prober probe.Prober, helper *accessHelper) MediaWriteService {
+func NewWriteService(store repository.WriteServiceStore, clk clock.Clock, mediaRoot string, thumbGen thumb.Generator, prober probe.Prober, helper *accessHelper) *writeService {
return &writeService{
store: store,
clock: clk,