home to your local SPACEGIRL 馃挮 arimelody.space
1
fork

Configure Feed

Select the types of activity you want to include in your feed.

at main 86 lines 2.9 kB view raw
1package admin 2 3import ( 4 "fmt" 5 "net/http" 6 "strings" 7 8 "arimelody-web/admin/templates" 9 "arimelody-web/controller" 10 "arimelody-web/model" 11) 12 13func serveTracks(app *model.AppState) http.Handler { 14 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 15 session := r.Context().Value("session").(*model.Session) 16 17 slices := strings.Split(strings.TrimPrefix(r.URL.Path, "/tracks")[1:], "/") 18 trackID := slices[0] 19 20 if len(trackID) > 0 { 21 serveTrack(app, trackID).ServeHTTP(w, r) 22 return 23 } 24 25 tracks, err := controller.GetAllTracks(app.DB) 26 if err != nil { 27 fmt.Printf("WARN: Failed to fetch tracks: %s\n", err) 28 http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) 29 return 30 } 31 32 type TracksResponse struct { 33 adminPageData 34 Tracks []*model.Track 35 } 36 37 err = templates.TracksTemplate.Execute(w, TracksResponse{ 38 adminPageData: adminPageData{ Path: r.URL.Path, Session: session }, 39 Tracks: tracks, 40 }) 41 if err != nil { 42 fmt.Printf("WARN: Failed to serve admin tracks page: %s\n", err) 43 http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) 44 } 45 }) 46} 47 48func serveTrack(app *model.AppState, trackID string) http.Handler { 49 return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { 50 session := r.Context().Value("session").(*model.Session) 51 52 track, err := controller.GetTrack(app.DB, trackID) 53 if err != nil { 54 fmt.Printf("WARN: Failed to serve admin track page for %s: %s\n", trackID, err) 55 http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) 56 return 57 } 58 if track == nil { 59 http.NotFound(w, r) 60 return 61 } 62 63 releases, err := controller.GetTrackReleases(app.DB, track.ID, true) 64 if err != nil { 65 fmt.Printf("WARN: Failed to fetch releases for track %s: %s\n", trackID, err) 66 http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) 67 return 68 } 69 70 type TrackResponse struct { 71 adminPageData 72 Track *model.Track 73 Releases []*model.Release 74 } 75 76 err = templates.EditTrackTemplate.Execute(w, TrackResponse{ 77 adminPageData: adminPageData{ Path: r.URL.Path, Session: session }, 78 Track: track, 79 Releases: releases, 80 }) 81 if err != nil { 82 fmt.Printf("WARN: Failed to serve admin track page for %s: %s\n", trackID, err) 83 http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) 84 } 85 }) 86}