package handlers import ( "database/sql" "html/template" "log" "net/http" "paterissa.net/mblog/internal/models" ) type blogContext struct { err *log.Logger db *sql.DB Rows []models.Post Name string } func (ctx *blogContext) index(w http.ResponseWriter, r *http.Request) { if r.URL.Path != "/" { http.NotFound(w, r) return } offset := r.URL.Query().Get("offset") if offset == "" { offset = "20" } rows, err := ctx.db.Query("SELECT * FROM posts WHERE id < " + offset + " ORDER BY id DESC LIMIT 20;") if err != nil { ctx.err.Print(err.Error()) http.Error(w, "Internal Server Error", 500) return } defer rows.Close() for rows.Next() { var p models.Post if err = rows.Scan(&p.Id, &p.Name, &p.Time, &p.Content); err != nil { ctx.err.Print(err.Error()) http.Error(w, "Internal Server Error", 500) return } ctx.Rows = append(ctx.Rows, p) } files := []string{ "ui/html/base.tmpl.html", "ui/html/music_player.tmpl.html", "ui/html/pages/index.tmpl.html", } compiled, err := template.ParseFiles(files...) if err != nil { ctx.err.Print(err.Error()) http.Error(w, "Internal Server Error", 500) return } err = compiled.ExecuteTemplate(w, "base", ctx) if err != nil { ctx.err.Print(err.Error()) http.Error(w, "Internal Server Error", 500) return } }