navidrome/persistence/db_storm/album_repository.go

111 lines
2.5 KiB
Go

package db_storm
import (
"time"
"github.com/asdine/storm/q"
"github.com/cloudsonic/sonic-server/domain"
)
type _Album struct {
ID string ``
Name string `storm:"index"`
ArtistID string `storm:"index"`
CoverArtPath string ``
CoverArtId string ``
Artist string `storm:"index"`
AlbumArtist string ``
Year int `storm:"index"`
Compilation bool ``
Starred bool `storm:"index"`
PlayCount int `storm:"index"`
PlayDate time.Time `storm:"index"`
SongCount int ``
Duration int ``
Rating int `storm:"index"`
Genre string ``
StarredAt time.Time `storm:"index"`
CreatedAt time.Time `storm:"index"`
UpdatedAt time.Time ``
}
type albumRepository struct {
stormRepository
}
func NewAlbumRepository() domain.AlbumRepository {
r := &albumRepository{}
r.init(&_Album{})
return r
}
func (r *albumRepository) Put(a *domain.Album) error {
ta := _Album(*a)
return Db().Save(&ta)
}
func (r *albumRepository) Get(id string) (*domain.Album, error) {
ta := &_Album{}
err := r.getByID(id, ta)
if err != nil {
return nil, err
}
a := domain.Album(*ta)
return &a, err
}
func (r *albumRepository) FindByArtist(artistId string) (domain.Albums, error) {
var albums []_Album
err := r.execute(q.Eq("ArtistID", artistId), &albums)
if err != nil {
return nil, err
}
return r.toAlbums(albums)
}
func (r *albumRepository) GetAll(options domain.QueryOptions) (domain.Albums, error) {
var all []_Album
err := r.getAll(&all, &options)
if err != nil {
return nil, err
}
return r.toAlbums(all)
}
func (r *albumRepository) toAlbums(all []_Album) (domain.Albums, error) {
result := make(domain.Albums, len(all))
for i, a := range all {
result[i] = domain.Album(a)
}
return result, nil
}
func (r *albumRepository) GetAllIds() ([]string, error) {
var all []_Album
err := r.getAll(&all, &domain.QueryOptions{})
if err != nil {
return nil, err
}
result := make([]string, len(all))
for i, a := range all {
result[i] = domain.Album(a).ID
}
return result, nil
}
func (r *albumRepository) PurgeInactive(activeList domain.Albums) ([]string, error) {
return r.purgeInactive(activeList)
}
func (r *albumRepository) GetStarred(options domain.QueryOptions) (domain.Albums, error) {
var starred []_Album
err := r.execute(q.Eq("Starred", true), &starred, &options)
if err != nil {
return nil, err
}
return r.toAlbums(starred)
}
var _ domain.AlbumRepository = (*albumRepository)(nil)
var _ = domain.Album(_Album{})