diff options
| author | Thibaut Horel <thibaut.horel@gmail.com> | 2017-06-19 22:21:33 -0400 |
|---|---|---|
| committer | Thibaut Horel <thibaut.horel@gmail.com> | 2017-06-19 22:21:33 -0400 |
| commit | a2a69c3fd9f0149650f8c53d985049a38f36f238 (patch) | |
| tree | f6a696fdece1aa12537c2c343e4162f52a3f2840 /data.go | |
| parent | 458294c8de2af24313d5d3e430482fb187128434 (diff) | |
| download | lastfm-api-a2a69c3fd9f0149650f8c53d985049a38f36f238.tar.gz | |
Lastfm loved tracks import
Diffstat (limited to 'data.go')
| -rw-r--r-- | data.go | 79 |
1 files changed, 61 insertions, 18 deletions
@@ -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 } |
