package main import ( "errors" "fmt" "html/template" "net/http" "strconv" "snippetbox.chaosfem.tw/internal/models" ) // home ... func (app *application) home(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/" { http.NotFound(w, r) return } snippets, err := app.snippets.Latest() if err != nil { app.serverError(w, r, err) return } for _, snippet := range snippets { fmt.Fprintf(w, "%+v", snippet) } // files := []string{ // "./ui/html/base.tmpl", // "./ui/html/partials/nav.tmpl", // "./ui/html/pages/home.tmpl", // } // ts, err := template.ParseFiles(files...) // if err != nil { // app.serverError(w, r, err) // return // } // err = ts.ExecuteTemplate(w, "base", nil) // if err != nil { // app.serverError(w, r, err) // } } // snippetView ... func (app *application) snippetView(w http.ResponseWriter, r *http.Request) { id, err := strconv.Atoi(r.URL.Query().Get("id")) if err != nil || id < 1 { app.notFound(w) return } snippet, err := app.snippets.Get(id) if err != nil || id < 1 { if errors.Is(err, models.ErrNoRecord) { app.notFound(w) } else { app.serverError(w, r, err) } return } files := []string{ "./ui/html/base.tmpl", "./ui/html/partials/nav.tmpl", "./ui/html/pages/view.tmpl", } ts, err := template.ParseFiles(files...) if err != nil { app.serverError(w, r, err) return } data := templateData{ Snippet: snippet, } err = ts.ExecuteTemplate(w, "base", data) if err != nil { app.serverError(w, r, err) } } // snippetCreate ... func (app *application) snippetCreate(w http.ResponseWriter, r *http.Request) { w.Header().Set("Allow", "POST") if r.Method != http.MethodPost { app.clientError(w, http.StatusMethodNotAllowed) return } title := "0 snail" content := "0 snail\nClimb Mount Fuji,\nBut slowly, slowly!\n\n - Kobayashi Issa" expires := 7 id, err := app.snippets.Insert(title, content, expires) if err != nil { app.serverError(w, r, err) return } http.Redirect(w, r, fmt.Sprintf("/snippet/view?id=%d", id), http.StatusSeeOther) }