commit 973fd4eb267f1a9096441a6f26c6a2410413709f
parent 23b4241cbf28e92c7b2b58ae9e452a011f592511
Author: n0tr1v <n0tr1v@protonmail.com>
Date: Sun, 15 Jan 2023 20:34:39 -0800
paginator cleanup
Diffstat:
2 files changed, 21 insertions(+), 81 deletions(-)
diff --git a/pkg/web/handlers/admin.go b/pkg/web/handlers/admin.go
@@ -267,29 +267,19 @@ func SessionsHandler(c echo.Context) error {
var data adminSessionsData
data.ActiveTab = "sessions"
data.Query = c.QueryParam("q")
- wantedPage := utils.DoParseInt64(c.QueryParam("p"))
likeQuery := "%" + data.Query + "%"
query := database.DB.Table("sessions").Where("deleted_at IS NULL")
if data.Query != "" {
query = query.Where("token LIKE ?", likeQuery, likeQuery, data.Query)
}
- query.Count(&data.SessionsCount)
- page, maxPage := Paginate(ResultsPerPage, wantedPage, data.SessionsCount)
+ data.CurrentPage, data.MaxPage, data.SessionsCount, query = NewPaginator().Paginate(c, query)
- query = database.DB.
- Order("created_at DESC").
- Offset((page - 1) * ResultsPerPage).
- Limit(ResultsPerPage)
- if data.Query != "" {
- query = query.Where("token LIKE ?", likeQuery, likeQuery, data.Query)
- }
+ query = query.Order("created_at DESC")
if err := query.Preload("User").Find(&data.Sessions).Error; err != nil {
logrus.Error(err)
}
- data.CurrentPage = page
- data.MaxPage = maxPage
return c.Render(http.StatusOK, "admin.sessions", data)
}
@@ -297,7 +287,6 @@ func IgnoredHandler(c echo.Context) error {
var data adminIgnoredData
data.ActiveTab = "ignored"
data.Query = c.QueryParam("q")
- wantedPage := utils.DoParseInt64(c.QueryParam("p"))
likeQuery := "%" + data.Query + "%"
query := database.DB.Table("ignored_users")
@@ -306,20 +295,12 @@ func IgnoredHandler(c echo.Context) error {
}
query.Count(&data.IgnoredCount)
- page, maxPage := Paginate(ResultsPerPage, wantedPage, data.IgnoredCount)
+ data.CurrentPage, data.MaxPage, data.IgnoredCount, query = NewPaginator().Paginate(c, query)
- query = database.DB.
- Order("created_at DESC").
- Offset((page - 1) * ResultsPerPage).
- Limit(ResultsPerPage)
- if data.Query != "" {
- query = query.Where("token LIKE ?", likeQuery, likeQuery, data.Query)
- }
+ query = query.Order("created_at DESC")
if err := query.Preload("User").Preload("IgnoredUser").Find(&data.Ignored).Error; err != nil {
logrus.Error(err)
}
- data.CurrentPage = page
- data.MaxPage = maxPage
return c.Render(http.StatusOK, "admin.ignored", data)
}
@@ -371,23 +352,17 @@ func BackupHandler(c echo.Context) error {
func AdminAuditsHandler(c echo.Context) error {
var data adminAuditsData
data.ActiveTab = "audits"
- wantedPage := utils.DoParseInt64(c.QueryParam("p"))
query := database.DB.Table("audit_logs")
- query.Count(&data.AuditLogsCount)
- page, maxPage := Paginate(ResultsPerPage, wantedPage, data.AuditLogsCount)
+ data.CurrentPage, data.MaxPage, data.AuditLogsCount, query = NewPaginator().Paginate(c, query)
- query = database.DB.
+ if err := query.
Preload("User").
Order("id DESC").
- Offset((page - 1) * ResultsPerPage).
- Limit(ResultsPerPage)
- if err := query.Find(&data.AuditLogs).Error; err != nil {
+ Find(&data.AuditLogs).Error; err != nil {
logrus.Error(err)
}
- data.CurrentPage = page
- data.MaxPage = maxPage
return c.Render(http.StatusOK, "admin.audits", data)
}
@@ -395,52 +370,38 @@ func AdminRoomsHandler(c echo.Context) error {
var data adminRoomsData
data.ActiveTab = "rooms"
data.Query = c.QueryParam("q")
- wantedPage := utils.DoParseInt64(c.QueryParam("p"))
likeQuery := "%" + data.Query + "%"
- query := database.DB.Table("chat_rooms")
+ query := database.DB.Table("chat_rooms").Unscoped()
if data.Query != "" {
query = query.Where("username LIKE ?", likeQuery, likeQuery, data.Query)
}
- query.Count(&data.RoomsCount)
- page, maxPage := Paginate(ResultsPerPage, wantedPage, data.RoomsCount)
+ data.CurrentPage, data.MaxPage, data.RoomsCount, query = NewPaginator().Paginate(c, query)
- query = database.DB.
+ if err := query.
Order("id DESC").
Preload("OwnerUser").
- Offset((page - 1) * ResultsPerPage).
- Limit(ResultsPerPage)
- if data.Query != "" {
- query = query.Where("username LIKE ?", likeQuery, likeQuery, data.Query)
- }
- if err := query.Unscoped().Find(&data.Rooms).Error; err != nil {
+ Find(&data.Rooms).Error; err != nil {
logrus.Error(err)
}
- data.CurrentPage = page
- data.MaxPage = maxPage
return c.Render(http.StatusOK, "admin.rooms", data)
}
func AdminCaptchaHandler(c echo.Context) error {
var data adminCaptchaData
data.ActiveTab = "captcha"
- wantedPage := utils.DoParseInt64(c.QueryParam("p"))
- database.DB.Table("captcha_requests").Count(&data.CaptchasCount)
+ query := database.DB.Table("captcha_requests")
- page, maxPage := Paginate(ResultsPerPage, wantedPage, data.CaptchasCount)
+ data.CurrentPage, data.MaxPage, data.CaptchasCount, query = NewPaginator().Paginate(c, query)
- if err := database.DB.
+ if err := query.
Preload("User").
Order("id DESC").
- Offset((page - 1) * ResultsPerPage).
- Limit(ResultsPerPage).
Find(&data.Captchas).Error; err != nil {
logrus.Error(err)
}
- data.CurrentPage = page
- data.MaxPage = maxPage
return c.Render(http.StatusOK, "admin.captcha", data)
}
diff --git a/pkg/web/handlers/handlers.go b/pkg/web/handlers/handlers.go
@@ -1171,7 +1171,6 @@ where fts5_forum_threads match ? and t.is_club = 0 order by rank limit 100`, dat
func LinksHandler(c echo.Context) error {
authUser := c.Get("authUser").(*database.User)
var data linksData
- resultsPerPage := int64(100)
data.Categories, _ = database.GetCategories()
@@ -1219,22 +1218,13 @@ LIMIT 100`, data.Search).Scan(&data.Links).Error; err != nil {
data.LinksCount = int64(len(data.Links))
}
} else {
- wantedPage := utils.DoParseInt64(c.QueryParam("p"))
-
query := database.DB.Table("links")
- query.Count(&data.LinksCount)
- page, maxPage := Paginate(resultsPerPage, wantedPage, data.LinksCount)
+ data.CurrentPage, data.MaxPage, data.LinksCount, query = NewPaginator().Paginate(c, query)
- query = database.DB.
- Order("title COLLATE NOCASE ASC").
- Offset((page - 1) * resultsPerPage).
- Limit(resultsPerPage)
- if err := query.Find(&data.Links).Error; err != nil {
+ if err := query.Order("title COLLATE NOCASE ASC").Find(&data.Links).Error; err != nil {
logrus.Error(err)
}
- data.CurrentPage = page
- data.MaxPage = maxPage
}
// Get all links IDs
@@ -1661,24 +1651,17 @@ func ThreadHandler(c echo.Context) error {
var data threadData
data.Thread = thread
- wantedPage := utils.DoParseInt64(c.QueryParam("p"))
-
query := database.DB.Table("forum_messages").Where("thread_id = ?", thread.ID)
- query.Count(&data.MessagesCount)
- page, maxPage := Paginate(ResultsPerPage, wantedPage, data.MessagesCount)
+ data.CurrentPage, data.MaxPage, data.MessagesCount, query = NewPaginator().Paginate(c, query)
- query = database.DB.
+ if err := query.
Order("id ASC").
Where("thread_id = ?", thread.ID).
Preload("User").
- Offset((page - 1) * ResultsPerPage).
- Limit(ResultsPerPage)
- if err := query.Find(&data.Messages).Error; err != nil {
+ Find(&data.Messages).Error; err != nil {
logrus.Error(err)
}
- data.CurrentPage = page
- data.MaxPage = maxPage
if authUser != nil {
data.IsSubscribed = database.IsUserSubscribedToForumThread(authUser.ID, thread.ID)
@@ -3133,16 +3116,12 @@ func (p *Paginator) Paginate(c echo.Context, query *gorm.DB) (int64, int64, int6
var count int64
query.Count(&count)
resultsPerPage := p.resultsPerPage
- page, maxPage := Paginate(resultsPerPage, wantedPage, count)
+ page, maxPage := paginate(resultsPerPage, wantedPage, count)
query = query.Offset((page - 1) * resultsPerPage).Limit(resultsPerPage)
return page, maxPage, count, query
}
-// ResultsPerPage ...
-var ResultsPerPage = int64(50)
-
-// Paginate ...
-func Paginate(resultsPerPage, wantedPage, size int64) (page int64, maxPage int64) {
+func paginate(resultsPerPage, wantedPage, size int64) (page int64, maxPage int64) {
page = wantedPage
if page <= 1 {
page = 1