aboutsummaryrefslogtreecommitdiffstats
path: root/data.go
diff options
context:
space:
mode:
authorThibaut Horel <thibaut.horel@gmail.com>2017-06-19 22:21:33 -0400
committerThibaut Horel <thibaut.horel@gmail.com>2017-06-19 22:21:33 -0400
commita2a69c3fd9f0149650f8c53d985049a38f36f238 (patch)
treef6a696fdece1aa12537c2c343e4162f52a3f2840 /data.go
parent458294c8de2af24313d5d3e430482fb187128434 (diff)
downloadlastfm-api-a2a69c3fd9f0149650f8c53d985049a38f36f238.tar.gz
Lastfm loved tracks import
Diffstat (limited to 'data.go')
-rw-r--r--data.go79
1 files changed, 61 insertions, 18 deletions
diff --git a/data.go b/data.go
index c2ecba4..4897665 100644
--- a/data.go
+++ b/data.go
@@ -55,6 +55,12 @@ type Import struct {
Count int
}
+type LoveImport struct {
+ LfmName string
+ Time time.Time
+ Count int
+}
+
type DataStore interface {
PutSession(*Session) error
GetSession(key string) (*Session, error)
@@ -74,7 +80,12 @@ type DataStore interface {
SaveImport(i *Import) error
InsertImport(i *Import) error
NewImport(name string) *Import
- ImportStats(user int) (time.Time, int, error)
+ ImportStats(name string) (*Import, error)
+
+ InsertLoveImport(i *LoveImport) error
+ LoveImportStats(name string) (*LoveImport, error)
+
+ InsertLovedTracks([]LovedTrack, *Session) error
InsertUserSession(s *UserSession) error
Api
@@ -295,23 +306,55 @@ func (store *SqlStore) NewImport(name string) *Import {
return i
}
-func (store *SqlStore) ImportStats(user int) (time.Time, int, error) {
+func (store *SqlStore) ImportStats(name string) (*Import, error) {
query := `
- SELECT "last", ct
- FROM (
- SELECT max("to") "last", sum(count) ct, lfm_name
- FROM scrobble_import
- GROUP BY lfm_name
- ) i
- JOIN users
- ON users.lfm_name = i.lfm_name
- WHERE users.user_id = $1`
- var t time.Time
- var count int
- row := store.QueryRow(query, user)
- if err := row.Scan(&t, &count); err != nil {
- return t, count, err
- } else {
- return t, count, nil
+ SELECT max("to"), sum(count)
+ FROM scrobble_import
+ WHERE lfm_name=$1
+ GROUP BY lfm_name`
+ i := new(Import)
+ row := store.QueryRow(query, name)
+ err := row.Scan(&i.To, &i.Count)
+ return i, err
+}
+
+func (store *SqlStore) InsertLoveImport(i *LoveImport) error {
+ query := `
+ INSERT INTO love_import (lfm_name, count) VALUES ($1, $2)`
+ _, err := store.Exec(query, i.LfmName, i.Count)
+ return err
+}
+
+func (store *SqlStore) InsertLovedTracks(lt []LovedTrack, se *Session) error {
+ tx, err := store.Begin()
+ if err != nil {
+ return err
}
+ query := `
+ INSERT INTO love
+ (artist, name, mbid, time, session, "user")
+ VALUES ($1, $2, $3, $4, $5, $6)`
+ st, err := tx.Prepare(query)
+ if err != nil {
+ return err
+ }
+
+ for _, t := range lt {
+ _, err = st.Exec(t.Artist.Name, t.Name, t.Mbid, t.Date.ToTime(),
+ se.Key, se.UserId)
+ if err != nil {
+ tx.Rollback()
+ return err
+ }
+ }
+ return tx.Commit()
+}
+func (store *SqlStore) LoveImportStats(name string) (*LoveImport, error) {
+ query := `
+ SELECT max(time), sum(count) FROM love_import
+ WHERE lfm_name = $1 GROUP BY lfm_name`
+ li := new(LoveImport)
+ row := store.QueryRow(query, name)
+ err := row.Scan(&li.Time, &li.Count)
+ return li, err
}