45 lines
950 B
Go
45 lines
950 B
Go
package api
|
|
|
|
import (
|
|
"encoding/json"
|
|
"msw-open-music/pkg/database"
|
|
"net/http"
|
|
"time"
|
|
)
|
|
|
|
type RecordPlaybackRequest struct {
|
|
Playback database.Playback `json:"playback"`
|
|
}
|
|
|
|
func (api *API) HandleRecordPlayback(w http.ResponseWriter, r *http.Request) {
|
|
recordPlaybackRequest := &RecordPlaybackRequest{}
|
|
err := json.NewDecoder(r.Body).Decode(recordPlaybackRequest)
|
|
if err != nil {
|
|
api.HandleError(w, r, err)
|
|
return
|
|
}
|
|
|
|
recordPlaybackRequest.Playback.Time = time.Now()
|
|
recordPlaybackRequest.Playback.UserID, err = api.GetUserID(w, r)
|
|
if err != nil {
|
|
if err == ErrNotLoggedIn {
|
|
user, err := api.Db.LoginAsAnonymous()
|
|
if err != nil {
|
|
api.HandleError(w, r, err)
|
|
return
|
|
}
|
|
recordPlaybackRequest.Playback.UserID = user.ID
|
|
} else {
|
|
api.HandleError(w, r, err)
|
|
return
|
|
}
|
|
}
|
|
|
|
err = api.Db.RecordPlayback(recordPlaybackRequest.Playback)
|
|
if err != nil {
|
|
api.HandleError(w, r, err)
|
|
return
|
|
}
|
|
api.HandleOK(w, r)
|
|
}
|