package view import ( "fmt" "net/http" "arimelody.me/arimelody.me/global" music "arimelody.me/arimelody.me/music/controller" "arimelody.me/arimelody.me/music/model" "arimelody.me/arimelody.me/templates" ) // HTTP HANDLER METHODS func Handler() http.Handler { mux := http.NewServeMux() mux.Handle("/", http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { if r.URL.Path == "/" { ServeCatalog().ServeHTTP(w, r) return } var release model.Release err := global.DB.Get(&release, "SELECT * FROM musicrelease WHERE id=$1", r.URL.Path[1:]) if err != nil { http.NotFound(w, r) return } ServeGateway(release).ServeHTTP(w, r) })) return mux } func ServeCatalog() http.Handler { return http.HandlerFunc(func(w http.ResponseWriter, r *http.Request) { dbReleases, err := music.GetAllReleases(global.DB) if err != nil { fmt.Printf("FATAL: Failed to pull releases for catalog: %s\n", err) http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } releases := []*model.FullRelease{} for _, dbRelease := range dbReleases { if !dbRelease.Visible { continue } if !dbRelease.IsReleased() { dbRelease.ReleaseType = model.Upcoming } release, err := music.GetFullRelease(global.DB, dbRelease.ID) if err != nil { fmt.Printf("FATAL: Failed to pull full release for %s: %s\n", dbRelease.ID, err) http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) return } releases = append(releases, release) } err = templates.Pages["music"].Execute(w, releases) if err != nil { http.Error(w, http.StatusText(http.StatusInternalServerError), http.StatusInternalServerError) } }) }