mirror of
https://github.com/navidrome/navidrome.git
synced 2025-04-23 15:20:33 +03:00
SQL/Orm PlaylistRepository complete
This commit is contained in:
parent
5d519dcecf
commit
973f8869eb
98
persistence/db_sql/playlist_repository.go
Normal file
98
persistence/db_sql/playlist_repository.go
Normal 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)
|
@ -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)
|
||||
|
@ -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")),
|
||||
|
@ -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,
|
||||
|
Loading…
x
Reference in New Issue
Block a user