SQL/Orm PlaylistRepository complete

This commit is contained in:
Deluan 2020-01-12 21:59:06 -05:00 committed by Deluan Quintão
parent 5d519dcecf
commit 973f8869eb
4 changed files with 101 additions and 3 deletions

View File

@ -0,0 +1,98 @@
package db_sql
import (
"strings"
"github.com/astaxie/beego/orm"
"github.com/cloudsonic/sonic-server/domain"
)
type Playlist struct {
ID string `orm:"pk;column(id)"`
Name string `orm:"index"`
Comment string
FullPath string
Duration int
Owner string
Public bool
Tracks string
}
type playlistRepository struct {
sqlRepository
}
func NewPlaylistRepository() domain.PlaylistRepository {
r := &playlistRepository{}
r.entityName = "playlist"
return r
}
func (r *playlistRepository) Put(p *domain.Playlist) error {
tp := r.fromDomain(p)
return r.put(p.ID, &tp)
}
func (r *playlistRepository) Get(id string) (*domain.Playlist, error) {
tp := &Playlist{ID: id}
err := Db().Read(tp)
if err == orm.ErrNoRows {
return nil, domain.ErrNotFound
}
if err != nil {
return nil, err
}
a := r.toDomain(tp)
return &a, err
}
func (r *playlistRepository) GetAll(options ...domain.QueryOptions) (domain.Playlists, error) {
var all []Playlist
_, err := r.newQuery(Db(), options...).All(&all)
if err != nil {
return nil, err
}
return r.toPlaylists(all)
}
func (r *playlistRepository) toPlaylists(all []Playlist) (domain.Playlists, error) {
result := make(domain.Playlists, len(all))
for i, p := range all {
result[i] = r.toDomain(&p)
}
return result, nil
}
func (r *playlistRepository) PurgeInactive(activeList domain.Playlists) ([]string, error) {
return r.purgeInactive(activeList, func(item interface{}) string {
return item.(domain.Playlist).ID
})
}
func (r *playlistRepository) toDomain(p *Playlist) domain.Playlist {
return domain.Playlist{
ID: p.ID,
Name: p.Name,
Comment: p.Comment,
FullPath: p.FullPath,
Duration: p.Duration,
Owner: p.Owner,
Public: p.Public,
Tracks: strings.Split(p.Tracks, ","),
}
}
func (r *playlistRepository) fromDomain(p *domain.Playlist) Playlist {
return Playlist{
ID: p.ID,
Name: p.Name,
Comment: p.Comment,
FullPath: p.FullPath,
Duration: p.Duration,
Owner: p.Owner,
Public: p.Public,
Tracks: strings.Join(p.Tracks, ","),
}
}
var _ domain.PlaylistRepository = (*playlistRepository)(nil)

View File

@ -60,6 +60,7 @@ func initORM(dbPath string) error {
orm.RegisterModel(new(ArtistInfo))
orm.RegisterModel(new(CheckSums))
orm.RegisterModel(new(Property))
orm.RegisterModel(new(Playlist))
err := orm.RegisterDataBase("default", "sqlite3", dbPath)
if err != nil {
panic(err)

View File

@ -2,7 +2,6 @@ package db_sql
import (
"github.com/cloudsonic/sonic-server/persistence"
"github.com/cloudsonic/sonic-server/persistence/db_ledis"
"github.com/google/wire"
)
@ -13,7 +12,7 @@ var Set = wire.NewSet(
NewArtistIndexRepository,
NewCheckSumRepository,
NewPropertyRepository,
db_ledis.NewPlaylistRepository,
NewPlaylistRepository,
persistence.NewNowPlayingRepository,
persistence.NewMediaFolderRepository,
wire.Value(persistence.ProviderIdentifier("sql")),

View File

@ -70,7 +70,7 @@ func createSQLProvider() *Provider {
mediaFileRepository := db_sql.NewMediaFileRepository()
mediaFolderRepository := persistence.NewMediaFolderRepository()
nowPlayingRepository := persistence.NewNowPlayingRepository()
playlistRepository := db_ledis.NewPlaylistRepository()
playlistRepository := db_sql.NewPlaylistRepository()
propertyRepository := db_sql.NewPropertyRepository()
provider := &Provider{
AlbumRepository: albumRepository,