summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorPaul Buetow <paul@buetow.org>2026-05-03 23:20:39 +0300
committerPaul Buetow <paul@buetow.org>2026-05-03 23:20:39 +0300
commit1ef944f52a3dc7a82897fbefb7f567f965a3c505 (patch)
tree8dc255dd5ff354ca11c548a37f4c781f74918e9d
parent003aee269bc73d5a0524c603585c567c9987916b (diff)
task 2 review fixes: narrow BrowseService and accessHelper store interfaces
-rw-r--r--internal/repository/mock.go10
-rw-r--r--internal/repository/repository.go8
-rw-r--r--internal/service/access.go2
-rw-r--r--internal/service/browse.go5
4 files changed, 22 insertions, 3 deletions
diff --git a/internal/repository/mock.go b/internal/repository/mock.go
index 1e31021..533810b 100644
--- a/internal/repository/mock.go
+++ b/internal/repository/mock.go
@@ -17,6 +17,16 @@ var (
_ ProgressServiceStore = (*MockStore)(nil)
_ GCStore = (*MockStore)(nil)
_ ScannerStore = (*MockStore)(nil)
+ _ AccessHelperStore = (*MockStore)(nil)
+ _ BrowseServiceStore = (*MockStore)(nil)
+ _ WriteServiceStore = (*MockStore)(nil)
+ _ ShareServiceStore = (*MockStore)(nil)
+ _ TagServiceStore = (*MockStore)(nil)
+ _ FavoriteServiceStore = (*MockStore)(nil)
+ _ NoteServiceStore = (*MockStore)(nil)
+ _ TrashServiceStore = (*MockStore)(nil)
+ _ UserAdminServiceStore = (*MockStore)(nil)
+ _ PermissionAdminServiceStore = (*MockStore)(nil)
)
// NewMockStore returns a MockStore with all no-op defaults.
diff --git a/internal/repository/repository.go b/internal/repository/repository.go
index 59ebb3b..03d8f1c 100644
--- a/internal/repository/repository.go
+++ b/internal/repository/repository.go
@@ -44,6 +44,14 @@ type AdminServiceStore interface {
MediaRepo
}
+// AccessHelperStore is the subset of Store required by service.accessHelper.
+type AccessHelperStore interface {
+ UserRepo
+ MediaRepo
+ SetRepo
+ SetPermissionRepo
+}
+
// ProgressServiceStore is the subset of Store required by service.ProgressService.
type ProgressServiceStore interface {
PlaybackProgressRepo
diff --git a/internal/service/access.go b/internal/service/access.go
index 891fd98..a6549ef 100644
--- a/internal/service/access.go
+++ b/internal/service/access.go
@@ -10,7 +10,7 @@ import (
// accessHelper encapsulates permission checks used by media sub-services.
type accessHelper struct {
- store repository.MediaServiceStore
+ store repository.AccessHelperStore
}
// checkSetPermission verifies that a user has the required role on a set.
diff --git a/internal/service/browse.go b/internal/service/browse.go
index 9e2f42c..aa82049 100644
--- a/internal/service/browse.go
+++ b/internal/service/browse.go
@@ -19,7 +19,7 @@ import (
// browseService handles read-only browsing and media streaming operations.
type browseService struct {
- store repository.MediaServiceStore
+ store repository.BrowseServiceStore
clock clock.Clock
mediaRoot string
thumbGen thumb.Generator
@@ -28,7 +28,7 @@ type browseService struct {
}
// NewBrowseService creates a BrowseService.
-func NewBrowseService(store repository.MediaServiceStore, clk clock.Clock, mediaRoot string, thumbGen thumb.Generator, prober probe.Prober, helper *accessHelper) MediaBrowseService {
+func NewBrowseService(store repository.BrowseServiceStore, clk clock.Clock, mediaRoot string, thumbGen thumb.Generator, prober probe.Prober, helper *accessHelper) MediaBrowseService {
return &browseService{
store: store,
clock: clk,
@@ -338,6 +338,7 @@ func (s *browseService) BrowseSet(ctx context.Context, setID, userID int64, pare
var folders []BrowseFolder
for name, fc := range folderMap {
+ // Flatten: show the lone file at the current level.
total := len(fc.files) + len(fc.subfolders)
if total == 1 && len(fc.files) == 1 {
items = append(items, fc.files[0])