From 148baefc06c1558776928dd635394dbfdad63da7 Mon Sep 17 00:00:00 2001 From: vulonkaaz <7442677+vulonkaaz@users.noreply.github.com> Date: Fri, 30 May 2025 02:29:35 +0200 Subject: multiple pages --- controllers/pages.go | 23 +++++++++++++++++++++-- 1 file changed, 21 insertions(+), 2 deletions(-) (limited to 'controllers/pages.go') diff --git a/controllers/pages.go b/controllers/pages.go index c5c5306..fd87570 100644 --- a/controllers/pages.go +++ b/controllers/pages.go @@ -7,15 +7,34 @@ import ( "log" ) +const maxThreadsPerPage = 24 + func ThreadList(c *fiber.Ctx) error { - var threads []models.Thread db := database.DB - if err := db.Select(&threads, "SELECT a.*, (SELECT COUNT(*) FROM \"post\" AS b WHERE b.thread = a.id) AS replies FROM \"post\" AS \"a\" WHERE \"thread\" IS NULL ORDER BY (SELECT c.created_at FROM \"post\" AS c WHERE c.thread = a.id OR c.id = a.id ORDER BY c.created_at DESC LIMIT 1) DESC"); err != nil { + var nthread []int + if err := db.Select(&nthread, "SELECT COUNT(*) FROM \"post\" WHERE \"thread\" IS NULL"); err != nil { + log.Println(err) + return c.Status(500).SendString("ERROR") + } + npage := (nthread[0] + maxThreadsPerPage - 1) / maxThreadsPerPage + var pages []int + for i := 1; i <= npage; i++ { + pages = append(pages, i) + } + + page,_ := c.ParamsInt("page") + if page < 1 { + page = 1 + } + offset := maxThreadsPerPage * (page - 1) + var threads []models.Thread + if err := db.Select(&threads, "SELECT a.*, (SELECT COUNT(*) FROM \"post\" AS b WHERE b.thread = a.id) AS replies FROM \"post\" AS \"a\" WHERE \"thread\" IS NULL ORDER BY (SELECT c.created_at FROM \"post\" AS c WHERE c.thread = a.id OR c.id = a.id ORDER BY c.created_at DESC LIMIT 1) DESC LIMIT $1 OFFSET $2", maxThreadsPerPage, offset); err != nil { log.Println(err) return c.Status(500).SendString("ERROR") } return c.Render("index", fiber.Map{ "posts": threads, + "pages": pages, }) } -- cgit v1.2.3