mirror of
https://github.com/idanoo/GoScrobble.git
synced 2024-11-21 16:11:56 +00:00
0.1.3 Add date ranges
This commit is contained in:
parent
1298bf9a7a
commit
b87ad426d6
@ -2,7 +2,7 @@ stages:
|
|||||||
- build
|
- build
|
||||||
|
|
||||||
variables:
|
variables:
|
||||||
VERSION: 0.1.2
|
VERSION: 0.1.3
|
||||||
|
|
||||||
build-go:
|
build-go:
|
||||||
image: golang:1.17
|
image: golang:1.17
|
||||||
|
@ -1,3 +1,6 @@
|
|||||||
|
# 0.1.3
|
||||||
|
-
|
||||||
|
|
||||||
# 0.1.2
|
# 0.1.2
|
||||||
- Add docker-compose file for local dev
|
- Add docker-compose file for local dev
|
||||||
- Implemented top listeners for artist/album endpoints to match track
|
- Implemented top listeners for artist/album endpoints to match track
|
||||||
|
@ -6,9 +6,13 @@ cd /var/www/goscrobble-api
|
|||||||
git pull
|
git pull
|
||||||
|
|
||||||
echo 'Building backend'
|
echo 'Building backend'
|
||||||
go build -o goscrobble cmd/go-scrobble/*.go
|
go build -o goscrobble cmd/goscrobble/*.go
|
||||||
|
|
||||||
|
|
||||||
|
echo 'Fetching lastest frontend commit'
|
||||||
cd /var/www/goscrobble-web
|
cd /var/www/goscrobble-web
|
||||||
|
git pull
|
||||||
|
|
||||||
echo 'Installing frontend packages'
|
echo 'Installing frontend packages'
|
||||||
npm install --production
|
npm install --production
|
||||||
|
|
||||||
|
@ -126,15 +126,21 @@ func getArtistByUUID(uuid string) (Artist, error) {
|
|||||||
return artist, nil
|
return artist, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getTopArtists(userUuid string) (TopArtists, error) {
|
func getTopArtists(userUuid string, dayRange string) (TopArtists, error) {
|
||||||
var topArtist TopArtists
|
var topArtist TopArtists
|
||||||
|
|
||||||
|
dateClause := ""
|
||||||
|
if dayRange != "" {
|
||||||
|
dateClause = " AND DATE(created_at) > SUBDATE(CURRENT_DATE, " + dayRange + ") "
|
||||||
|
}
|
||||||
|
|
||||||
rows, err := db.Query("SELECT BIN_TO_UUID(`artists`.`uuid`, true), `artists`.`name`, IFNULL(BIN_TO_UUID(`artists`.`uuid`, true),''), count(*) "+
|
rows, err := db.Query("SELECT BIN_TO_UUID(`artists`.`uuid`, true), `artists`.`name`, IFNULL(BIN_TO_UUID(`artists`.`uuid`, true),''), count(*) "+
|
||||||
"FROM `scrobbles` "+
|
"FROM `scrobbles` "+
|
||||||
"JOIN `tracks` ON `tracks`.`uuid` = `scrobbles`.`track` "+
|
"JOIN `tracks` ON `tracks`.`uuid` = `scrobbles`.`track` "+
|
||||||
"JOIN track_artist ON track_artist.track = tracks.uuid "+
|
"JOIN track_artist ON track_artist.track = tracks.uuid "+
|
||||||
"JOIN artists ON track_artist.artist = artists.uuid "+
|
"JOIN artists ON track_artist.artist = artists.uuid "+
|
||||||
"WHERE `scrobbles`.`user` = UUID_TO_BIN(?, true) "+
|
"WHERE `scrobbles`.`user` = UUID_TO_BIN(?, true) "+
|
||||||
|
dateClause+
|
||||||
"GROUP BY `artists`.`uuid` "+
|
"GROUP BY `artists`.`uuid` "+
|
||||||
"ORDER BY count(*) DESC "+
|
"ORDER BY count(*) DESC "+
|
||||||
"LIMIT 14;",
|
"LIMIT 14;",
|
||||||
|
@ -77,17 +77,18 @@ func HandleRequests(port string) {
|
|||||||
v1.HandleFunc("/profile/{username}", limitMiddleware(getProfile, lightLimiter)).Methods("GET")
|
v1.HandleFunc("/profile/{username}", limitMiddleware(getProfile, lightLimiter)).Methods("GET")
|
||||||
|
|
||||||
v1.HandleFunc("/artists/top/{uuid}", limitMiddleware(getArtists, lightLimiter)).Methods("GET")
|
v1.HandleFunc("/artists/top/{uuid}", limitMiddleware(getArtists, lightLimiter)).Methods("GET")
|
||||||
|
v1.HandleFunc("/artists/top/{uuid}/{days:[0-9]+}", limitMiddleware(getArtists, lightLimiter)).Methods("GET")
|
||||||
v1.HandleFunc("/artists/{uuid}", limitMiddleware(getArtist, lightLimiter)).Methods("GET")
|
v1.HandleFunc("/artists/{uuid}", limitMiddleware(getArtist, lightLimiter)).Methods("GET")
|
||||||
v1.HandleFunc("/artists/{uuid}/top", limitMiddleware(getTopUsersForArtist, lightLimiter)).Methods("GET")
|
v1.HandleFunc("/artists/{uuid}/top", limitMiddleware(getTopUsersForArtist, lightLimiter)).Methods("GET")
|
||||||
|
|
||||||
v1.HandleFunc("/albums/top/{uuid}", limitMiddleware(getArtists, lightLimiter)).Methods("GET")
|
v1.HandleFunc("/tracks/top/{uuid}", limitMiddleware(getTracks, lightLimiter)).Methods("GET") // User UUID - Top Tracks
|
||||||
|
v1.HandleFunc("/tracks/top/{uuid}/{days:[0-9]+}", limitMiddleware(getTracks, lightLimiter)).Methods("GET") // User UUID - Top Tracks (With Date)
|
||||||
|
v1.HandleFunc("/tracks/{uuid}", limitMiddleware(getTrack, lightLimiter)).Methods("GET") // Track UUID
|
||||||
|
v1.HandleFunc("/tracks/{uuid}/top", limitMiddleware(getTopUsersForTrack, lightLimiter)).Methods("GET") // TrackUUID - Top Listeners
|
||||||
|
|
||||||
v1.HandleFunc("/albums/{uuid}", limitMiddleware(getAlbum, lightLimiter)).Methods("GET")
|
v1.HandleFunc("/albums/{uuid}", limitMiddleware(getAlbum, lightLimiter)).Methods("GET")
|
||||||
v1.HandleFunc("/albums/{uuid}/top", limitMiddleware(getTopUsersForAlbum, lightLimiter)).Methods("GET")
|
v1.HandleFunc("/albums/{uuid}/top", limitMiddleware(getTopUsersForAlbum, lightLimiter)).Methods("GET")
|
||||||
|
|
||||||
v1.HandleFunc("/tracks/top/{uuid}", limitMiddleware(getTracks, lightLimiter)).Methods("GET") // User UUID - Top Tracks
|
|
||||||
v1.HandleFunc("/tracks/{uuid}", limitMiddleware(getTrack, lightLimiter)).Methods("GET") // Track UUID
|
|
||||||
v1.HandleFunc("/tracks/{uuid}/top", limitMiddleware(getTopUsersForTrack, lightLimiter)).Methods("GET") // TrackUUID - Top Listeners
|
|
||||||
|
|
||||||
v1.HandleFunc("/register", limitMiddleware(handleRegister, heavyLimiter)).Methods("POST")
|
v1.HandleFunc("/register", limitMiddleware(handleRegister, heavyLimiter)).Methods("POST")
|
||||||
v1.HandleFunc("/login", limitMiddleware(handleLogin, standardLimiter)).Methods("POST")
|
v1.HandleFunc("/login", limitMiddleware(handleLogin, standardLimiter)).Methods("POST")
|
||||||
v1.HandleFunc("/sendreset", limitMiddleware(handleSendReset, heavyLimiter)).Methods("POST")
|
v1.HandleFunc("/sendreset", limitMiddleware(handleSendReset, heavyLimiter)).Methods("POST")
|
||||||
@ -594,18 +595,21 @@ func getTrack(w http.ResponseWriter, r *http.Request) {
|
|||||||
// getArtists - Returns artist data for a user
|
// getArtists - Returns artist data for a user
|
||||||
func getArtists(w http.ResponseWriter, r *http.Request) {
|
func getArtists(w http.ResponseWriter, r *http.Request) {
|
||||||
var uuid string
|
var uuid string
|
||||||
|
|
||||||
|
dayRange := ""
|
||||||
for k, v := range mux.Vars(r) {
|
for k, v := range mux.Vars(r) {
|
||||||
if k == "uuid" {
|
if k == "uuid" {
|
||||||
uuid = v
|
uuid = v
|
||||||
|
} else if k == "days" {
|
||||||
|
dayRange = v
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
if uuid == "" {
|
if uuid == "" {
|
||||||
throwOkError(w, "Invalid UUID")
|
throwOkError(w, "Invalid UUID")
|
||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
track, err := getTopArtists(uuid)
|
track, err := getTopArtists(uuid, dayRange)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
throwOkError(w, err.Error())
|
throwOkError(w, err.Error())
|
||||||
return
|
return
|
||||||
@ -616,37 +620,16 @@ func getArtists(w http.ResponseWriter, r *http.Request) {
|
|||||||
w.Write(json)
|
w.Write(json)
|
||||||
}
|
}
|
||||||
|
|
||||||
// getAlbums - Returns album data for a user
|
|
||||||
func getAlbums(w http.ResponseWriter, r *http.Request) {
|
|
||||||
var uuid string
|
|
||||||
for k, v := range mux.Vars(r) {
|
|
||||||
if k == "uuid" {
|
|
||||||
uuid = v
|
|
||||||
}
|
|
||||||
}
|
|
||||||
|
|
||||||
if uuid == "" {
|
|
||||||
throwOkError(w, "Invalid UUID")
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
album, err := getAlbumByUUID(uuid)
|
|
||||||
if err != nil {
|
|
||||||
throwOkError(w, err.Error())
|
|
||||||
return
|
|
||||||
}
|
|
||||||
|
|
||||||
json, _ := json.Marshal(&album)
|
|
||||||
w.WriteHeader(http.StatusOK)
|
|
||||||
w.Write(json)
|
|
||||||
}
|
|
||||||
|
|
||||||
// getTracks - Returns track data for a user
|
// getTracks - Returns track data for a user
|
||||||
func getTracks(w http.ResponseWriter, r *http.Request) {
|
func getTracks(w http.ResponseWriter, r *http.Request) {
|
||||||
var uuid string
|
var uuid string
|
||||||
|
|
||||||
|
dayRange := ""
|
||||||
for k, v := range mux.Vars(r) {
|
for k, v := range mux.Vars(r) {
|
||||||
if k == "uuid" {
|
if k == "uuid" {
|
||||||
uuid = v
|
uuid = v
|
||||||
|
} else if k == "days" {
|
||||||
|
dayRange = v
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -655,7 +638,7 @@ func getTracks(w http.ResponseWriter, r *http.Request) {
|
|||||||
return
|
return
|
||||||
}
|
}
|
||||||
|
|
||||||
track, err := getTopTracks(uuid)
|
track, err := getTopTracks(uuid, dayRange)
|
||||||
if err != nil {
|
if err != nil {
|
||||||
throwOkError(w, err.Error())
|
throwOkError(w, err.Error())
|
||||||
return
|
return
|
||||||
@ -838,7 +821,7 @@ func getServerInfo(w http.ResponseWriter, r *http.Request) {
|
|||||||
}
|
}
|
||||||
|
|
||||||
info := ServerInfo{
|
info := ServerInfo{
|
||||||
Version: "0.1.2",
|
Version: "0.1.3",
|
||||||
RegistrationEnabled: registrationEnabled,
|
RegistrationEnabled: registrationEnabled,
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -184,19 +184,26 @@ func getTrackByUUID(uuid string) (Track, error) {
|
|||||||
return track, nil
|
return track, nil
|
||||||
}
|
}
|
||||||
|
|
||||||
func getTopTracks(userUuid string) (TopTracks, error) {
|
func getTopTracks(userUuid string, dayRange string) (TopTracks, error) {
|
||||||
var topTracks TopTracks
|
var topTracks TopTracks
|
||||||
|
|
||||||
|
dateClause := ""
|
||||||
|
if dayRange != "" {
|
||||||
|
dateClause = " AND DATE(created_at) > SUBDATE(CURRENT_DATE, " + dayRange + ") "
|
||||||
|
}
|
||||||
|
|
||||||
rows, err := db.Query("SELECT BIN_TO_UUID(`tracks`.`uuid`, true), `tracks`.`name`, IFNULL(BIN_TO_UUID(`albums`.`uuid`, true),''), count(*) "+
|
rows, err := db.Query("SELECT BIN_TO_UUID(`tracks`.`uuid`, true), `tracks`.`name`, IFNULL(BIN_TO_UUID(`albums`.`uuid`, true),''), count(*) "+
|
||||||
"FROM `scrobbles` "+
|
"FROM `scrobbles` "+
|
||||||
"JOIN `tracks` ON `tracks`.`uuid` = `scrobbles`.`track` "+
|
"JOIN `tracks` ON `tracks`.`uuid` = `scrobbles`.`track` "+
|
||||||
"JOIN track_album ON track_album.track = tracks.uuid "+
|
"JOIN track_album ON track_album.track = tracks.uuid "+
|
||||||
"JOIN albums ON track_album.album = albums.uuid "+
|
"JOIN albums ON track_album.album = albums.uuid "+
|
||||||
"WHERE `user` = UUID_TO_BIN(?, true) "+
|
"WHERE `user` = UUID_TO_BIN(?, true) "+
|
||||||
|
dateClause+
|
||||||
"GROUP BY `scrobbles`.`track` "+
|
"GROUP BY `scrobbles`.`track` "+
|
||||||
"ORDER BY count(*) DESC "+
|
"ORDER BY count(*) DESC "+
|
||||||
"LIMIT 14",
|
"LIMIT 14",
|
||||||
userUuid)
|
userUuid)
|
||||||
|
|
||||||
if err != nil {
|
if err != nil {
|
||||||
log.Printf("Failed to fetch top tracks: %+v", err)
|
log.Printf("Failed to fetch top tracks: %+v", err)
|
||||||
return topTracks, errors.New("Failed to fetch top tracks")
|
return topTracks, errors.New("Failed to fetch top tracks")
|
||||||
|
Loading…
Reference in New Issue
Block a user