package admin import ( "fmt" "net/http" "strings" "arimelody.me/arimelody.me/global" "arimelody.me/arimelody.me/music/model" "arimelody.me/arimelody.me/music/controller" ) func serveTrack() http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { slices := strings.Split(r.URL.Path[1:], "/") id := slices[0] track, err := music.GetTrack(global.DB, id) if err != nil { fmt.Printf("Error rendering admin track page for %s: %s\n", id, err) http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } if track == nil { http.NotFound(w, r) return } dbReleases, err := music.GetTrackReleases(global.DB, track.ID) if err != nil { fmt.Printf("Error rendering admin track page for %s: %s\n", id, err) http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } releases := []model.FullRelease{} for _, release := range dbReleases { fullRelease, err := music.GetFullRelease(global.DB, release.ID) if err != nil { fmt.Printf("FATAL: Failed to pull full release data for %s: %s\n", release.ID, err) http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } releases = append(releases, *fullRelease) } type Track struct { *model.Track Releases []model.FullRelease } err = pages["track"].Execute(w, Track{ Track: track, Releases: releases }) if err != nil { fmt.Printf("Error rendering admin track page for %s: %s\n", id, err) http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) } }) }