From 973f8869eb4f9f5a922d5f41d18afea038fa9c34 Mon Sep 17 00:00:00 2001 From: Deluan Date: Sun, 12 Jan 2020 21:59:06 -0500 Subject: [PATCH] SQL/Orm PlaylistRepository complete --- persistence/db_sql/playlist_repository.go | 98 +++++++++++++++++++++++ persistence/db_sql/sql.go | 1 + persistence/db_sql/wire_provider.go | 3 +- wire_gen.go | 2 +- 4 files changed, 101 insertions(+), 3 deletions(-) create mode 100644 persistence/db_sql/playlist_repository.go diff --git a/persistence/db_sql/playlist_repository.go b/persistence/db_sql/playlist_repository.go new file mode 100644 index 000000000..6a8dc0660 --- /dev/null +++ b/persistence/db_sql/playlist_repository.go @@ -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) diff --git a/persistence/db_sql/sql.go b/persistence/db_sql/sql.go index bb032e0df..7ef6af274 100644 --- a/persistence/db_sql/sql.go +++ b/persistence/db_sql/sql.go @@ -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) diff --git a/persistence/db_sql/wire_provider.go b/persistence/db_sql/wire_provider.go index af9561488..c0bce6391 100644 --- a/persistence/db_sql/wire_provider.go +++ b/persistence/db_sql/wire_provider.go @@ -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")), diff --git a/wire_gen.go b/wire_gen.go index 0990959d4..8b94b89b4 100644 --- a/wire_gen.go +++ b/wire_gen.go @@ -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,