diff options
| author | Anhgelus Morhtuuzh <william@herges.fr> | 2025-12-22 18:18:56 +0000 |
|---|---|---|
| committer | Anhgelus Morhtuuzh <william@herges.fr> | 2025-12-22 18:18:56 +0000 |
| commit | 66d6ab349196fd5d95937f533faa9db6ba65ebb3 (patch) | |
| tree | 84ce7dd31c9e4dc10dbb41c5428cc2cb66bb44d9 /backend/admin.go | |
| parent | 1c86bdda2a3067ade9aa765d8d87fe27151dd895 (diff) | |
| parent | c66a5cc0809875df0299ebb80be423436c195416 (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.go | 53 |
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) + }) +} |
