package main import ( "errors" "fmt" "net/http" "git.32bit.cafe/yequari/webring/internal/models" ) func (app *application) home(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/" { http.NotFound(w, r) return } sites, err := app.siteEntries.Latest() if err != nil { app.serverError(w, err) } app.render(w, http.StatusOK, "home.tmpl.html", &templateData{ SiteEntries: sites, }) } func (app *application) webmasterView(w http.ResponseWriter, r *http.Request) { id := models.WebmasterId(r.URL.Query().Get("id")) webmaster, err := app.webmasters.Get(id) if err != nil { if errors.Is(err, models.ErrNoRecord) { app.notFound(w) } else { app.serverError(w, err) } return } fmt.Fprintf(w, "%+v", webmaster) } func (app *application) webmasterCreate(w http.ResponseWriter, r *http.Request) { } func (app *application) siteEntryView(w http.ResponseWriter, r *http.Request) { id := models.SiteId(r.URL.Query().Get("id")) if id == "" { app.notFound(w) return } siteEntry, err := app.siteEntries.Get(id) if err != nil { if errors.Is(err, models.ErrNoRecord) { app.notFound(w) } else { app.serverError(w, err) } return } webmaster, err := app.webmasters.Get(siteEntry.Webmaster) if err != nil { if errors.Is(err, models.ErrNoRecord) { app.notFound(w) } else { app.serverError(w, err) } return } app.render(w, http.StatusOK, "view.tmpl.html", &templateData{ SiteEntry: siteEntry, Webmaster: webmaster, }) } func (app *application) siteEntryCreate(w http.ResponseWriter, r *http.Request) { } func (app *application) nextSiteEntry(w http.ResponseWriter, r *http.Request) { ref := app.cleanUrl(r.Referer()) refSite, err := app.siteEntries.GetByUrl(ref) if err != nil { app.serverError(w, err) return } nextSite, err := app.siteEntries.Get(refSite.Next) if err != nil { app.serverError(w, err) app.infoLog.Printf("%+v", nextSite) return } // TODO ping next site to see if it is up w.Header().Set("Location", nextSite.Url) w.WriteHeader(http.StatusFound) } func (app *application) prevSiteEntry(w http.ResponseWriter, r *http.Request) { ref := app.cleanUrl(r.Referer()) refSite, err := app.siteEntries.GetByUrl(ref) if err != nil { app.serverError(w, err) return } prevSite, err := app.siteEntries.Get(refSite.Prev) if err != nil { app.serverError(w, err) return } // TODO ping next site to see if it is up w.Header().Set("Location", prevSite.Url) w.WriteHeader(http.StatusFound) }