Files
MeBox/internal/service/media.go
T
truewhile 5c85478883 1
2026-09-14 12:33:59 +08:00

66 lines
1.5 KiB
Go

// Package service — library / media bookkeeping.
package service
import (
"go.uber.org/zap"
"golang.org/x/sync/singleflight"
"github.com/truewhile/MeBox/internal/config"
"github.com/truewhile/MeBox/internal/model"
"github.com/truewhile/MeBox/internal/repository"
)
// MediaService offers high-level CRUD over libraries and media items.
type MediaService struct {
cfg *config.Config
log *zap.Logger
repo *repository.Container
cache *RuntimeCacheService
groupedMediaFlight singleflight.Group
libraryRowsFlight singleflight.Group
}
type MediaVisibility struct {
IncludeNSFW bool
AllowedLibraryIDs []string
HiddenLibraryIDs []string
}
const maxMediaSearchLimit = 50000
const maxMediaSearchPageSize = 2000
func (v MediaVisibility) Allows(media *model.Media) bool {
if media == nil {
return false
}
if !v.IncludeNSFW && media.NSFW {
return false
}
for _, id := range v.HiddenLibraryIDs {
if id == media.LibraryID {
return false
}
}
if len(v.AllowedLibraryIDs) == 0 {
return true
}
for _, id := range v.AllowedLibraryIDs {
if id == media.LibraryID {
return true
}
}
return false
}
// NewMediaService is the constructor.
func NewMediaService(cfg *config.Config, log *zap.Logger, repo *repository.Container) *MediaService {
return &MediaService{cfg: cfg, log: log, repo: repo}
}
func (s *MediaService) SetRuntimeCache(cache *RuntimeCacheService) *MediaService {
if s != nil {
s.cache = cache
}
return s
}