added share list page

This commit is contained in:
Pijus Kamandulis
2025-05-27 22:56:44 +03:00
parent 1cc12afa16
commit 6f18e75688
7 changed files with 246 additions and 28 deletions
+2
View File
@@ -22,6 +22,8 @@ func NewWebServer(db *clover.DB, port int) *WebServer {
func (ws *WebServer) Start() error {
http.HandleFunc("/", ws.IndexHandler)
http.HandleFunc("/shares", ws.SharesHandler)
address := ":" + fmt.Sprint(ws.port)
println("Listening on", address)
return http.ListenAndServe(address, nil)
+59
View File
@@ -0,0 +1,59 @@
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
}
}