SQL/Orm PlaylistRepository complete
This commit is contained in:
@@ -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)
|
||||||
@@ -60,6 +60,7 @@ func initORM(dbPath string) error {
|
|||||||
orm.RegisterModel(new(ArtistInfo))
|
orm.RegisterModel(new(ArtistInfo))
|
||||||
orm.RegisterModel(new(CheckSums))
|
orm.RegisterModel(new(CheckSums))
|
||||||
orm.RegisterModel(new(Property))
|
orm.RegisterModel(new(Property))
|
||||||
|
orm.RegisterModel(new(Playlist))
|
||||||
err := orm.RegisterDataBase("default", "sqlite3", dbPath)
|
err := orm.RegisterDataBase("default", "sqlite3", dbPath)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
panic(err)
|
panic(err)
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package db_sql
|
|||||||
|
|
||||||
import (
|
import (
|
||||||
"github.com/cloudsonic/sonic-server/persistence"
|
"github.com/cloudsonic/sonic-server/persistence"
|
||||||
"github.com/cloudsonic/sonic-server/persistence/db_ledis"
|
|
||||||
"github.com/google/wire"
|
"github.com/google/wire"
|
||||||
)
|
)
|
||||||
|
|
||||||
@@ -13,7 +12,7 @@ var Set = wire.NewSet(
|
|||||||
NewArtistIndexRepository,
|
NewArtistIndexRepository,
|
||||||
NewCheckSumRepository,
|
NewCheckSumRepository,
|
||||||
NewPropertyRepository,
|
NewPropertyRepository,
|
||||||
db_ledis.NewPlaylistRepository,
|
NewPlaylistRepository,
|
||||||
persistence.NewNowPlayingRepository,
|
persistence.NewNowPlayingRepository,
|
||||||
persistence.NewMediaFolderRepository,
|
persistence.NewMediaFolderRepository,
|
||||||
wire.Value(persistence.ProviderIdentifier("sql")),
|
wire.Value(persistence.ProviderIdentifier("sql")),
|
||||||
|
|||||||
+1
-1
@@ -70,7 +70,7 @@ func createSQLProvider() *Provider {
|
|||||||
mediaFileRepository := db_sql.NewMediaFileRepository()
|
mediaFileRepository := db_sql.NewMediaFileRepository()
|
||||||
mediaFolderRepository := persistence.NewMediaFolderRepository()
|
mediaFolderRepository := persistence.NewMediaFolderRepository()
|
||||||
nowPlayingRepository := persistence.NewNowPlayingRepository()
|
nowPlayingRepository := persistence.NewNowPlayingRepository()
|
||||||
playlistRepository := db_ledis.NewPlaylistRepository()
|
playlistRepository := db_sql.NewPlaylistRepository()
|
||||||
propertyRepository := db_sql.NewPropertyRepository()
|
propertyRepository := db_sql.NewPropertyRepository()
|
||||||
provider := &Provider{
|
provider := &Provider{
|
||||||
AlbumRepository: albumRepository,
|
AlbumRepository: albumRepository,
|
||||||
|
|||||||
Reference in New Issue
Block a user