|
|
@@ -2,7 +2,6 @@ package repository
|
|
|
|
|
|
import (
|
|
|
"errors"
|
|
|
- "fmt"
|
|
|
|
|
|
"github.com/felamaslen/go-music-player/pkg/read"
|
|
|
"github.com/jmoiron/sqlx"
|
|
|
@@ -11,8 +10,6 @@ import (
|
|
|
|
|
|
const BATCH_SIZE = 100
|
|
|
|
|
|
-const UNKNOWN_ARTIST = "Unknown Artist"
|
|
|
-
|
|
|
func SelectSong(db *sqlx.DB, id int) (song *read.Song, err error) {
|
|
|
var songs []*read.Song
|
|
|
|
|
|
@@ -41,14 +38,13 @@ func SelectSong(db *sqlx.DB, id int) (song *read.Song, err error) {
|
|
|
|
|
|
func SelectPagedArtists(db *sqlx.DB, limit int, offset int) (artists *[]string, err error) {
|
|
|
artists = &[]string{}
|
|
|
- err = db.Select(artists, fmt.Sprintf(`
|
|
|
- select distinct
|
|
|
- case when artist = '' then '%s' else artist end as artist
|
|
|
+ err = db.Select(artists, `
|
|
|
+ select distinct artist
|
|
|
from songs
|
|
|
order by artist
|
|
|
limit $1
|
|
|
offset $2
|
|
|
- `, UNKNOWN_ARTIST), limit, offset)
|
|
|
+ `, limit, offset)
|
|
|
return
|
|
|
}
|
|
|
|
|
|
@@ -70,6 +66,18 @@ func SelectArtistCount(db *sqlx.DB) (count int, err error) {
|
|
|
return
|
|
|
}
|
|
|
|
|
|
+func SelectAlbumsByArtist(db *sqlx.DB, artist string) (albums *[]string, err error) {
|
|
|
+ albums = &[]string{}
|
|
|
+ err = db.Select(albums, `
|
|
|
+ select distinct album
|
|
|
+ from songs
|
|
|
+ where artist = $1
|
|
|
+ order by album
|
|
|
+ `, artist)
|
|
|
+
|
|
|
+ return
|
|
|
+}
|
|
|
+
|
|
|
func BatchUpsertSongs(db *sqlx.DB, batch *[BATCH_SIZE]*read.Song, batchSize int) error {
|
|
|
var trackNumbers pq.Int64Array
|
|
|
var titles pq.StringArray
|