aboutsummaryrefslogtreecommitdiff
path: root/controllers/pages.go
diff options
context:
space:
mode:
Diffstat (limited to 'controllers/pages.go')
-rw-r--r--controllers/pages.go23
1 files changed, 21 insertions, 2 deletions
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,
})
}