summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--internal/repository/mock.go7
-rw-r--r--internal/repository/repository.go39
-rw-r--r--internal/scanner/scanner.go4
-rw-r--r--internal/scanner/scanner_test.go2
-rw-r--r--internal/service/admin.go4
-rw-r--r--internal/service/gc.go4
-rw-r--r--internal/service/media.go4
-rw-r--r--internal/service/progress.go4
8 files changed, 56 insertions, 12 deletions
diff --git a/internal/repository/mock.go b/internal/repository/mock.go
index 1363906..5959586 100644
--- a/internal/repository/mock.go
+++ b/internal/repository/mock.go
@@ -10,7 +10,12 @@ import (
// compile-time checks.
var (
- _ Store = (*MockStore)(nil)
+ _ Store = (*MockStore)(nil)
+ _ MediaServiceStore = (*MockStore)(nil)
+ _ AdminServiceStore = (*MockStore)(nil)
+ _ ProgressServiceStore = (*MockStore)(nil)
+ _ GCStore = (*MockStore)(nil)
+ _ ScannerStore = (*MockStore)(nil)
)
// NewMockStore returns a MockStore with all no-op defaults.
diff --git a/internal/repository/repository.go b/internal/repository/repository.go
index 1f12c77..b93484c 100644
--- a/internal/repository/repository.go
+++ b/internal/repository/repository.go
@@ -23,6 +23,45 @@ type Store interface {
NoteRepo
}
+// MediaServiceStore is the subset of Store required by service.MediaService.
+type MediaServiceStore interface {
+ UserRepo
+ SetRepo
+ SetPermissionRepo
+ MediaRepo
+ TagRepo
+ FavoriteRepo
+ PlaybackProgressRepo
+ ShareRepo
+ NoteRepo
+}
+
+// AdminServiceStore is the subset of Store required by service.AdminService.
+type AdminServiceStore interface {
+ UserRepo
+ SetRepo
+ SetPermissionRepo
+ MediaRepo
+}
+
+// ProgressServiceStore is the subset of Store required by service.ProgressService.
+type ProgressServiceStore interface {
+ PlaybackProgressRepo
+ PlaybackAccumulatorRepo
+ MediaRepo
+}
+
+// GCStore is the subset of Store required by service.GCWorker.
+type GCStore interface {
+ MediaRepo
+}
+
+// ScannerStore is the subset of Store required by scanner.FSScanner.
+type ScannerStore interface {
+ SetRepo
+ MediaRepo
+}
+
// UserRepo manages application users.
type UserRepo interface {
CreateUser(ctx context.Context, user *model.User) (int64, error)
diff --git a/internal/scanner/scanner.go b/internal/scanner/scanner.go
index b44955e..ec7638e 100644
--- a/internal/scanner/scanner.go
+++ b/internal/scanner/scanner.go
@@ -22,7 +22,7 @@ type Scanner interface {
// FSScanner recursively scans media root for sets and media files.
type FSScanner struct {
- store repository.Store
+ store repository.ScannerStore
prober probe.Prober
thumbGen thumb.Generator
clock clock.Clock
@@ -31,7 +31,7 @@ type FSScanner struct {
}
// NewFSScanner creates a filesystem scanner with injected dependencies.
-func NewFSScanner(store repository.Store, 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) Scanner {
return &FSScanner{
store: store,
prober: prober,
diff --git a/internal/scanner/scanner_test.go b/internal/scanner/scanner_test.go
index 4accfb7..b924c85 100644
--- a/internal/scanner/scanner_test.go
+++ b/internal/scanner/scanner_test.go
@@ -91,7 +91,7 @@ func (m *mockFS) WalkDir(root string, walkFn fs.WalkDirFunc) error {
return nil
}
-func newTestScanner(store repository.Store, prober probe.Prober, gen thumb.Generator, clk clock.Clock, filesystem FS) *FSScanner {
+func newTestScanner(store repository.ScannerStore, prober probe.Prober, gen thumb.Generator, clk clock.Clock, filesystem FS) *FSScanner {
return &FSScanner{
store: store,
prober: prober,
diff --git a/internal/service/admin.go b/internal/service/admin.go
index d3a25c5..9b443cb 100644
--- a/internal/service/admin.go
+++ b/internal/service/admin.go
@@ -12,13 +12,13 @@ import (
// adminService is the concrete implementation of AdminService.
type adminService struct {
- store repository.Store
+ store repository.AdminServiceStore
clock clock.Clock
hasher auth.Hasher
}
// NewAdminService creates a concrete AdminService.
-func NewAdminService(store repository.Store, clk clock.Clock, hasher auth.Hasher) AdminService {
+func NewAdminService(store repository.AdminServiceStore, clk clock.Clock, hasher auth.Hasher) AdminService {
return &adminService{
store: store,
clock: clk,
diff --git a/internal/service/gc.go b/internal/service/gc.go
index 5ac4120..4078893 100644
--- a/internal/service/gc.go
+++ b/internal/service/gc.go
@@ -15,7 +15,7 @@ import (
// GCWorker is a background worker that hard-deletes soft-deleted media older than a threshold.
type GCWorker struct {
- store repository.Store
+ store repository.GCStore
clock clock.Clock
interval time.Duration
age time.Duration
@@ -28,7 +28,7 @@ type GCWorker struct {
}
// NewGCWorker creates a GCWorker. Use WithAge and WithInterval to customise.
-func NewGCWorker(store repository.Store, clk clock.Clock, mediaRoot string, interval time.Duration, logger *slog.Logger) *GCWorker {
+func NewGCWorker(store repository.GCStore, clk clock.Clock, mediaRoot string, interval time.Duration, logger *slog.Logger) *GCWorker {
return &GCWorker{
store: store,
clock: clk,
diff --git a/internal/service/media.go b/internal/service/media.go
index aba3804..e10d5ff 100644
--- a/internal/service/media.go
+++ b/internal/service/media.go
@@ -19,13 +19,13 @@ import (
// mediaService is the concrete implementation of MediaService.
type mediaService struct {
- store repository.Store
+ store repository.MediaServiceStore
clock clock.Clock
mediaRoot string
}
// NewMediaService creates a concrete MediaService.
-func NewMediaService(store repository.Store, clk clock.Clock, mediaRoot string) MediaService {
+func NewMediaService(store repository.MediaServiceStore, clk clock.Clock, mediaRoot string) MediaService {
return &mediaService{
store: store,
clock: clk,
diff --git a/internal/service/progress.go b/internal/service/progress.go
index 2480dae..7a6bae4 100644
--- a/internal/service/progress.go
+++ b/internal/service/progress.go
@@ -11,12 +11,12 @@ import (
// progressService is the concrete implementation of ProgressService.
type progressService struct {
- store repository.Store
+ store repository.ProgressServiceStore
clock clock.Clock
}
// NewProgressService creates a concrete ProgressService.
-func NewProgressService(store repository.Store, clk clock.Clock) ProgressService {
+func NewProgressService(store repository.ProgressServiceStore, clk clock.Clock) ProgressService {
return &progressService{
store: store,
clock: clk,