mirror of
https://github.com/idanoo/GoScrobble
synced 2025-07-01 13:42:20 +00:00
Add extra info to track page + API
This commit is contained in:
parent
97dd3e5bba
commit
f914575e09
9 changed files with 3349 additions and 2525 deletions
|
@ -554,12 +554,20 @@ func getTrack(w http.ResponseWriter, r *http.Request) {
|
|||
return
|
||||
}
|
||||
|
||||
// Load track obj
|
||||
track, err := getTrackByUUID(uuid)
|
||||
if err != nil {
|
||||
throwOkError(w, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
// Load in Album/Artist info
|
||||
err = track.loadExtraTrackInfo()
|
||||
if err != nil {
|
||||
throwOkError(w, err.Error())
|
||||
return
|
||||
}
|
||||
|
||||
json, _ := json.Marshal(&track)
|
||||
w.WriteHeader(http.StatusOK)
|
||||
w.Write(json)
|
||||
|
|
|
@ -9,13 +9,15 @@ import (
|
|||
)
|
||||
|
||||
type Track struct {
|
||||
UUID string `json:"uuid"`
|
||||
Name string `json:"name"`
|
||||
Length int `json:"length"`
|
||||
Desc string `json:"desc"`
|
||||
Img string `json:"img"`
|
||||
MusicBrainzID string `json:"mbid"`
|
||||
SpotifyID string `json:"spotify_id"`
|
||||
UUID string `json:"uuid"`
|
||||
Name string `json:"name"`
|
||||
Length int `json:"length"`
|
||||
Desc string `json:"desc"`
|
||||
Img string `json:"img"`
|
||||
MusicBrainzID string `json:"mbid"`
|
||||
SpotifyID string `json:"spotify_id"`
|
||||
Artists []Artist `json:"artists"` // Optional Artist
|
||||
Albums []Album `json:"albums"` // Optional Albums
|
||||
}
|
||||
|
||||
type TopTrack struct {
|
||||
|
@ -219,3 +221,76 @@ func getTopTracks(userUuid string) (TopTracks, error) {
|
|||
|
||||
return topTracks, nil
|
||||
}
|
||||
|
||||
func (track *Track) loadExtraTrackInfo() error {
|
||||
err := track.getArtistsForTrack()
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
err = track.getAlbumsForTrack()
|
||||
return err
|
||||
}
|
||||
|
||||
func (track *Track) getArtistsForTrack() error {
|
||||
artists := []Artist{}
|
||||
|
||||
rows, err := db.Query("SELECT BIN_TO_UUID(`track_artist`.`artist`, true) "+
|
||||
"FROM `track_artist` "+
|
||||
"WHERE `track_artist`.`track` = UUID_TO_BIN(?, true)",
|
||||
track.UUID)
|
||||
if err != nil {
|
||||
log.Printf("Failed to fetch artists for track: %+v", err)
|
||||
return errors.New("Failed to fetch top tracks")
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
for rows.Next() {
|
||||
var artistUUID string
|
||||
err := rows.Scan(&artistUUID)
|
||||
if err != nil {
|
||||
log.Printf("Failed to fetch track_artist: %+v", err)
|
||||
return errors.New("Failed to fetch track")
|
||||
}
|
||||
|
||||
artist, err := getArtistByUUID(artistUUID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
artists = append(artists, artist)
|
||||
}
|
||||
|
||||
track.Artists = artists
|
||||
return nil
|
||||
}
|
||||
|
||||
func (track *Track) getAlbumsForTrack() error {
|
||||
albums := []Album{}
|
||||
|
||||
rows, err := db.Query("SELECT BIN_TO_UUID(`track_album`.`album`, true) "+
|
||||
"FROM `track_album` "+
|
||||
"WHERE `track_album`.`track` = UUID_TO_BIN(?, true)",
|
||||
track.UUID)
|
||||
if err != nil {
|
||||
log.Printf("Failed to fetch album for track: %+v", err)
|
||||
return errors.New("Failed to fetch top tracks")
|
||||
}
|
||||
defer rows.Close()
|
||||
|
||||
for rows.Next() {
|
||||
var albumUUID string
|
||||
err := rows.Scan(&albumUUID)
|
||||
if err != nil {
|
||||
log.Printf("Failed to fetch track_album: %+v", err)
|
||||
return errors.New("Failed to fetch track")
|
||||
}
|
||||
|
||||
album, err := getAlbumByUUID(albumUUID)
|
||||
if err != nil {
|
||||
return err
|
||||
}
|
||||
albums = append(albums, album)
|
||||
}
|
||||
|
||||
track.Albums = albums
|
||||
return nil
|
||||
}
|
||||
|
|
|
@ -145,7 +145,7 @@ func filterSlice(s []string) []string {
|
|||
}
|
||||
|
||||
var result []string
|
||||
for item, _ := range m {
|
||||
for item := range m {
|
||||
result = append(result, item)
|
||||
}
|
||||
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue