aboutsummaryrefslogtreecommitdiff
path: root/backend/admin.go
diff options
context:
space:
mode:
authorAnhgelus Morhtuuzh <william@herges.fr>2025-12-22 18:18:56 +0000
committerAnhgelus Morhtuuzh <william@herges.fr>2025-12-22 18:18:56 +0000
commit66d6ab349196fd5d95937f533faa9db6ba65ebb3 (patch)
tree84ce7dd31c9e4dc10dbb41c5428cc2cb66bb44d9 /backend/admin.go
parent1c86bdda2a3067ade9aa765d8d87fe27151dd895 (diff)
parentc66a5cc0809875df0299ebb80be423436c195416 (diff)
Merge pull request '[Feat] Stats' (#4) from feat/stats into main
Reviewed-on: https://git.anhgelus.world/anhgelus/small-web/pulls/4
Diffstat (limited to 'backend/admin.go')
-rw-r--r--backend/admin.go53
1 files changed, 53 insertions, 0 deletions
diff --git a/backend/admin.go b/backend/admin.go
new file mode 100644
index 0000000..087a3ea
--- /dev/null
+++ b/backend/admin.go
@@ -0,0 +1,53 @@
+package backend
+
+import (
+ "log/slog"
+ "net/http"
+ "strconv"
+
+ "git.anhgelus.world/anhgelus/small-web/backend/storage"
+ "github.com/go-chi/chi/v5"
+)
+
+type adminData struct {
+ *data
+ Visits []storage.StatsRow
+ Rows []storage.StatsRow
+ PagesNumber int
+ CurrentPage int
+}
+
+func HandleAdmin(r *chi.Mux) {
+ r.Get("/admin", func(w http.ResponseWriter, r *http.Request) {
+ ctx := r.Context()
+ if !ctx.Value(loginKey).(bool) {
+ w.Header().Set("WWW-Authenticate", `Basic realm="restricted", charset="UTF-8"`)
+ http.Error(w, "Unauthorized", http.StatusUnauthorized)
+ return
+ }
+ d := new(adminData)
+ d.data = new(data)
+ rawPage := r.URL.Query().Get("page")
+ page := 1
+ var err error
+ if rawPage != "" {
+ page, err = strconv.Atoi(rawPage)
+ if err != nil || page < 1 {
+ slog.Warn("invalid page number", "rawPage", rawPage)
+ http.Error(w, "Bad request", http.StatusBadRequest)
+ return
+ }
+ }
+ d.Rows, err = storage.GetStatsRows(ctx, uint(page))
+ if err != nil {
+ panic(err)
+ }
+ d.Visits, err = storage.GetUnionStatsRows(ctx)
+ if err != nil {
+ panic(err)
+ }
+ d.PagesNumber = page + max(len(d.Rows)-storage.StatsPerPage+1, 0)
+ d.CurrentPage = page
+ d.handleGeneric(w, r, "admin", d)
+ })
+}