dkforest

A forum and chat platform (onion)
git clone https://git.dasho.dev/n0tr1v/dkforest.git
Log | Files | Refs | LICENSE

commit 973fd4eb267f1a9096441a6f26c6a2410413709f
parent 23b4241cbf28e92c7b2b58ae9e452a011f592511
Author: n0tr1v <n0tr1v@protonmail.com>
Date:   Sun, 15 Jan 2023 20:34:39 -0800

paginator cleanup

Diffstat:
Mpkg/web/handlers/admin.go | 67++++++++++++++-----------------------------------------------------
Mpkg/web/handlers/handlers.go | 35+++++++----------------------------
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