From ea1316cd6d8b71bd4e0cb93a41541828d03eefa8 Mon Sep 17 00:00:00 2001 From: Simon Ser Date: Mon, 19 Feb 2024 13:29:31 +0100 Subject: [PATCH] Show user list in admin dashboard --- db.go | 19 +++++++++++++++++++ template/index.html | 36 +++++++++++++++++++++++++++++++----- user.go | 15 +++++++++++++-- diff --git a/db.go b/db.go index 277fd646cfcb8601263db4bfed9f4d60d7968865..6d7e2a447703f9c83719f9bbb6bf4971e6a735f1 100644 --- a/db.go +++ b/db.go @@ -89,6 +89,25 @@ RETURNING id `, entityArgs(user)...).Scan(&user.ID) } +func (db *DB) ListUsers(ctx context.Context) ([]User, error) { + rows, err := db.db.QueryContext(ctx, "SELECT * FROM User") + if err != nil { + return nil, err + } + defer rows.Close() + + var l []User + for rows.Next() { + var user User + if err := scan(&user, rows); err != nil { + return nil, err + } + l = append(l, user) + } + + return l, rows.Close() +} + func (db *DB) FetchClient(ctx context.Context, id ID[*Client]) (*Client, error) { rows, err := db.db.QueryContext(ctx, "SELECT * FROM Client WHERE id = ?", id) if err != nil { diff --git a/template/index.html b/template/index.html index f71ba9109c942a7dcd292164e96794e1e231d196..d4c6d5daaa6f05a35fe0b850f68270cc6b2a308b 100644 --- a/template/index.html +++ b/template/index.html @@ -7,17 +7,18 @@

Welcome, {{ .Me.Username }}!

- {{ if .Me.Admin }} - - - {{ end }}
{{ if .Me.Admin }} +

Clients

+ {{ with .Clients }} -

{{ . | len }} clients registered:

+

+ +

+ @@ -33,6 +34,31 @@
Client ID
{{ else }}

No client registered yet.

{{ end }} + +

Users

+ +

+ +

+ + + + + + + {{ range .Users }} + + + + + {{ end }} +
UsernameRole
{{ .Username }} + {{ if .Admin }} + Administrator + {{ else }} + Regular user + {{ end}} +
{{ end }} diff --git a/user.go b/user.go index 1adc8c50a82a787bbeb01c9af5110ce2d0d47111..e59dac355f0bb2fbd2fb75edae8c8c55bfae6616 100644 --- a/user.go +++ b/user.go @@ -32,12 +32,23 @@ httpError(w, err) return } + var users []User + if me.Admin { + users, err = db.ListUsers(ctx) + if err != nil { + httpError(w, err) + return + } + } + data := struct { - Clients []Client Me *User + Clients []Client + Users []User }{ + Me: me, Clients: clients, - Me: me, + Users: users, } if err := tpl.ExecuteTemplate(w, "index.html", &data); err != nil { panic(err) -- 2.48.1