package persistence
import (
"context"
. "github.com/Masterminds/squirrel"
"github.com/deluan/rest"
"github.com/navidrome/navidrome/model"
"github.com/pocketbase/dbx"
)
type genreRepository struct {
*baseTagRepository
}
func NewGenreRepository(db dbx.Builder) model.GenreRepository {
return &genreRepository{
baseTagRepository: newBaseTagRepository(db, new(model.TagGenre)),
}
}
func (r *genreRepository) selectGenre(ctx context.Context, opt ...model.QueryOptions) SelectBuilder {
return r.newSelect(ctx, opt...).Columns("tag.tag_value as name")
}
func (r *genreRepository) GetAll(ctx context.Context, opt ...model.QueryOptions) (model.Genres, error) {
sq := r.selectGenre(ctx, opt...)
res := model.Genres{}
err := r.queryAll(ctx, sq, &res)
return res, err
}
func (r *genreRepository) Get(ctx context.Context, id string) (*model.Genre, error) {
sel := r.selectGenre(ctx).Where(Eq{"tag.id": id})
var res model.Genre
err := r.queryOne(ctx, sel, &res)
return &res, err
}
func (r *genreRepository) Read(ctx context.Context, id string) (*model.Genre, error) {
return r.Get(ctx, id)
}
func (r *genreRepository) ReadAll(ctx context.Context, options ...rest.QueryOptions) ([]model.Genre, error) {
return r.GetAll(ctx, r.parseRestOptions(ctx, options...))
}
var _ model.GenreRepository = (*genreRepository)(nil)
var _ rest.Repository[model.Genre] = (*genreRepository)(nil)