package core
import (
"context"
"github.com/deluan/rest"
"github.com/navidrome/navidrome/model"
)
type PluginUnloader interface {
UnloadDisabledPlugins(ctx context.Context)
}
type User interface {
Repository() rest.Repository[model.User]
}
type userService struct {
repo *userRepositoryWrapper
}
func NewUser(ds model.DataStore, pluginManager PluginUnloader) User {
return &userService{
repo: &userRepositoryWrapper{
UserRepository: ds.User(),
pluginManager: pluginManager,
},
}
}
func (s *userService) Repository() rest.Repository[model.User] {
return s.repo
}
type userRepositoryWrapper struct {
model.UserRepository
pluginManager PluginUnloader
}
var _ rest.Persistable[model.User] = (*userRepositoryWrapper)(nil)
func (r *userRepositoryWrapper) Delete(ctx context.Context, ids ...string) error {
err := r.UserRepository.Delete(ctx, ids...)
r.pluginManager.UnloadDisabledPlugins(ctx)
return err
}