package web import ( "html/template" "net/http" "pool-stats/database" "pool-stats/helpers" "pool-stats/models" "strconv" ) type SharePageData struct { Shares []models.ShareLog Page int HasMore bool } func (ws *WebServer) SharesHandler(w http.ResponseWriter, r *http.Request) { tmpl := template.New("share_list").Funcs(template.FuncMap{ "add": func(a, b int) int { return a + b }, "sub": func(a, b int) int { return a - b }, "humanDiff": helpers.HumanDiff, "formatCreateDate": helpers.FormatCreateDate, }) tmpl, err := tmpl.ParseFiles("templates/shares.html") if err != nil { http.Error(w, "Failed to load template", 500) return } entriesPerPage := 10 page := r.URL.Query().Get("page") if page == "" { page = "1" } offset, err := strconv.Atoi(page) if err != nil || offset < 1 { http.Error(w, "Invalid page number", 400) return } offset = (offset - 1) * entriesPerPage shareLogs := database.ListShares(ws.db, offset, entriesPerPage) if shareLogs == nil { http.Error(w, "Failed to load shares", 500) return } data := SharePageData{ Shares: shareLogs, Page: offset/entriesPerPage + 1, HasMore: len(shareLogs) == entriesPerPage, } if err := tmpl.Execute(w, data); err != nil { http.Error(w, "Failed to render template", 500) return } }