refactor mux path routes
legend has it that if you refactor your code enough times, one day you will finally be happy
This commit is contained in:
parent
82fd17c836
commit
21912d4ec2
17 changed files with 102 additions and 469 deletions
|
|
@ -4,7 +4,6 @@ import (
|
|||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"arimelody-web/admin/core"
|
||||
"arimelody-web/admin/templates"
|
||||
|
|
@ -16,14 +15,6 @@ func serveArtists(app *model.AppState) http.Handler {
|
|||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
session := r.Context().Value("session").(*model.Session)
|
||||
|
||||
slices := strings.Split(strings.TrimPrefix(r.URL.Path, "/artists")[1:], "/")
|
||||
artistID := slices[0]
|
||||
|
||||
if len(artistID) > 0 {
|
||||
serveArtist(app, artistID).ServeHTTP(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
artists, err := controller.GetAllArtists(app.DB)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "WARN: Failed to fetch artists: %s\n", err)
|
||||
|
|
|
|||
|
|
@ -9,9 +9,17 @@ func Handler(app *model.AppState) http.Handler {
|
|||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
mux := http.NewServeMux()
|
||||
|
||||
mux.Handle("/releases/", serveReleases(app))
|
||||
mux.Handle("/artists/", serveArtists(app))
|
||||
mux.Handle("/tracks/", serveTracks(app))
|
||||
mux.Handle("/releases/", http.StripPrefix("/releases", serveReleases(app)))
|
||||
|
||||
mux.HandleFunc("/artists/{id}", func(w http.ResponseWriter, r *http.Request) {
|
||||
serveArtist(app, r.PathValue("id")).ServeHTTP(w, r)
|
||||
})
|
||||
mux.Handle("/artists/", http.StripPrefix("/artists", serveArtists(app)))
|
||||
|
||||
mux.HandleFunc("/tracks/{id}", func(w http.ResponseWriter, r *http.Request) {
|
||||
serveTrack(app, r.PathValue("id")).ServeHTTP(w, r)
|
||||
})
|
||||
mux.Handle("/tracks/", http.StripPrefix("/tracks", serveTracks(app)))
|
||||
|
||||
mux.ServeHTTP(w, r)
|
||||
})
|
||||
|
|
|
|||
|
|
@ -13,22 +13,43 @@ import (
|
|||
)
|
||||
|
||||
func serveReleases(app *model.AppState) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
session := r.Context().Value("session").(*model.Session)
|
||||
mux := http.NewServeMux()
|
||||
|
||||
slices := strings.Split(strings.TrimPrefix(r.URL.Path, "/releases")[1:], "/")
|
||||
releaseID := slices[0]
|
||||
|
||||
var action string = ""
|
||||
if len(slices) > 1 {
|
||||
action = slices[1]
|
||||
}
|
||||
|
||||
if len(releaseID) > 0 {
|
||||
serveRelease(app, releaseID, action).ServeHTTP(w, r)
|
||||
mux.HandleFunc("/{id}/", func(w http.ResponseWriter, r *http.Request) {
|
||||
releaseID := r.PathValue("id")
|
||||
release, err := controller.GetRelease(app.DB, releaseID, true)
|
||||
if err != nil {
|
||||
if strings.Contains(err.Error(), "no rows") {
|
||||
http.NotFound(w, r)
|
||||
return
|
||||
}
|
||||
fmt.Fprintf(os.Stderr, "WARN: Failed to fetch full release data for %s: %s\n", releaseID, err)
|
||||
http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError)
|
||||
return
|
||||
}
|
||||
|
||||
mux := http.NewServeMux()
|
||||
|
||||
mux.Handle("/{id}/editcredits", serveEditCredits(release))
|
||||
mux.Handle("/{id}/addcredit", serveAddCredit(app, release))
|
||||
mux.Handle("/{id}/newcredit", serveNewCredit(app))
|
||||
|
||||
mux.Handle("/{id}/editlinks", serveEditLinks(release))
|
||||
|
||||
mux.Handle("/{id}/edittracks", serveEditTracks(release))
|
||||
mux.Handle("/{id}/addtrack", serveAddTrack(app, release))
|
||||
mux.Handle("/{id}/newtrack", serveNewTrack(app))
|
||||
|
||||
mux.ServeHTTP(w, r)
|
||||
})
|
||||
|
||||
mux.HandleFunc("/{id}", func(w http.ResponseWriter, r *http.Request) {
|
||||
serveRelease(app, r.PathValue("id")).ServeHTTP(w, r)
|
||||
})
|
||||
|
||||
mux.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
|
||||
session := r.Context().Value("session").(*model.Session)
|
||||
|
||||
type ReleasesData struct {
|
||||
core.AdminPageData
|
||||
Releases []*model.Release
|
||||
|
|
@ -54,9 +75,11 @@ func serveReleases(app *model.AppState) http.Handler {
|
|||
return
|
||||
}
|
||||
})
|
||||
|
||||
return mux
|
||||
}
|
||||
|
||||
func serveRelease(app *model.AppState, releaseID string, action string) http.Handler {
|
||||
func serveRelease(app *model.AppState, releaseID string) http.Handler {
|
||||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
session := r.Context().Value("session").(*model.Session)
|
||||
|
||||
|
|
@ -71,34 +94,6 @@ func serveRelease(app *model.AppState, releaseID string, action string) http.Han
|
|||
return
|
||||
}
|
||||
|
||||
if len(action) > 0 {
|
||||
switch action {
|
||||
case "editcredits":
|
||||
serveEditCredits(release).ServeHTTP(w, r)
|
||||
return
|
||||
case "addcredit":
|
||||
serveAddCredit(app, release).ServeHTTP(w, r)
|
||||
return
|
||||
case "newcredit":
|
||||
serveNewCredit(app).ServeHTTP(w, r)
|
||||
return
|
||||
case "editlinks":
|
||||
serveEditLinks(release).ServeHTTP(w, r)
|
||||
return
|
||||
case "edittracks":
|
||||
serveEditTracks(release).ServeHTTP(w, r)
|
||||
return
|
||||
case "addtrack":
|
||||
serveAddTrack(app, release).ServeHTTP(w, r)
|
||||
return
|
||||
case "newtrack":
|
||||
serveNewTrack(app).ServeHTTP(w, r)
|
||||
return
|
||||
}
|
||||
http.NotFound(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
type ReleaseResponse struct {
|
||||
core.AdminPageData
|
||||
Release *model.Release
|
||||
|
|
|
|||
|
|
@ -4,7 +4,6 @@ import (
|
|||
"fmt"
|
||||
"net/http"
|
||||
"os"
|
||||
"strings"
|
||||
|
||||
"arimelody-web/admin/core"
|
||||
"arimelody-web/admin/templates"
|
||||
|
|
@ -16,14 +15,6 @@ func serveTracks(app *model.AppState) http.Handler {
|
|||
return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) {
|
||||
session := r.Context().Value("session").(*model.Session)
|
||||
|
||||
slices := strings.Split(strings.TrimPrefix(r.URL.Path, "/tracks")[1:], "/")
|
||||
trackID := slices[0]
|
||||
|
||||
if len(trackID) > 0 {
|
||||
serveTrack(app, trackID).ServeHTTP(w, r)
|
||||
return
|
||||
}
|
||||
|
||||
tracks, err := controller.GetAllTracks(app.DB)
|
||||
if err != nil {
|
||||
fmt.Fprintf(os.Stderr, "WARN: Failed to fetch tracks: %s\n", err)
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue