aboutsummaryrefslogtreecommitdiff
path: root/backend/home.go
diff options
context:
space:
mode:
Diffstat (limited to 'backend/home.go')
-rw-r--r--backend/home.go29
1 files changed, 26 insertions, 3 deletions
diff --git a/backend/home.go b/backend/home.go
index 32634a1..43ace8a 100644
--- a/backend/home.go
+++ b/backend/home.go
@@ -1,19 +1,25 @@
package backend
import (
+ "log/slog"
"maps"
"net/http"
"slices"
+ "strconv"
"time"
"github.com/go-chi/chi/v5"
)
+const maxLogsPerPage = 5
+
var sortedLogs []*logData
type homeData struct {
*data
- Logs []*logData
+ Logs []*logData
+ PagesNumber int
+ CurrentPage int
}
func (h *homeData) SetData(d *data) {
@@ -22,18 +28,35 @@ func (h *homeData) SetData(d *data) {
func HandleHome(r *chi.Mux) {
r.Get("/", func(w http.ResponseWriter, r *http.Request) {
+ rawPage := r.URL.Query().Get("page")
+ page := 1
+ if rawPage != "" {
+ var err error
+ page, err = strconv.Atoi(rawPage)
+ if err != nil || page < 1 {
+ slog.Warn("invalid page number", "rawPage", rawPage)
+ w.WriteHeader(http.StatusBadRequest)
+ return
+ }
+ }
d := new(homeData)
d.data = new(data)
if sortedLogs == nil {
sortLogs()
}
- d.Logs = sortedLogs
+ d.CurrentPage = page
+ d.PagesNumber = len(sortedLogs)/maxLogsPerPage + 1
+ if d.PagesNumber < page {
+ http.NotFoundHandler().ServeHTTP(w, r)
+ return
+ }
+ d.Logs = sortedLogs[(page-1)*maxLogsPerPage : min(page*maxLogsPerPage, len(sortedLogs))]
d.handleGeneric(w, r, "home", d)
})
}
func sortLogs() {
- slices.SortedFunc(maps.Values(logs), func(l *logData, l2 *logData) int {
+ sortedLogs = slices.SortedFunc(maps.Values(logs), func(l *logData, l2 *logData) int {
lt := l.pubDate.AsTime(time.UTC)
l2t := l2.pubDate.AsTime(time.UTC)
// we want it reversed