package persistence import ( "context" . "github.com/Masterminds/squirrel" "github.com/deluan/rest" "github.com/navidrome/navidrome/model" "github.com/pocketbase/dbx" ) type genreRepository struct { sqlRepository } func NewGenreRepository(ctx context.Context, db dbx.Builder) model.GenreRepository { r := &genreRepository{} r.ctx = ctx r.db = db r.registerModel(&model.Tag{}, map[string]filterFunc{ "name": containsFilter("tag_value"), }) r.setSortMappings(map[string]string{ "name": "tag_name", }) return r } func (r *genreRepository) selectGenre(opt ...model.QueryOptions) SelectBuilder { return r.newSelect(opt...). Columns( "id", "tag_value as name", "album_count", "media_file_count as song_count", ). Where(Eq{"tag.tag_name": model.TagGenre}) } func (r *genreRepository) GetAll(opt ...model.QueryOptions) (model.Genres, error) { sq := r.selectGenre(opt...) res := model.Genres{} err := r.queryAll(sq, &res) return res, err } func (r *genreRepository) Count(options ...rest.QueryOptions) (int64, error) { return r.count(r.selectGenre(), r.parseRestOptions(r.ctx, options...)) } func (r *genreRepository) Read(id string) (interface{}, error) { sel := r.selectGenre().Columns("*").Where(Eq{"id": id}) var res model.Genre err := r.queryOne(sel, &res) return &res, err } func (r *genreRepository) ReadAll(options ...rest.QueryOptions) (interface{}, error) { return r.GetAll(r.parseRestOptions(r.ctx, options...)) } func (r *genreRepository) EntityName() string { return r.tableName } func (r *genreRepository) NewInstance() interface{} { return &model.Genre{} } var _ model.GenreRepository = (*genreRepository)(nil) var _ model.ResourceRepository = (*genreRepository)(nil)