From 123239476301e1135430f75585ce4a6b4544acb8 Mon Sep 17 00:00:00 2001 From: "quarterback[bot]" Date: Thu, 20 Aug 2026 20:53:22 +0000 Subject: [PATCH] feat: add reporting channel confirmation partial Authored-by: Quarterback --- internal/http/handlers/profile.go | 18 +++++- internal/http/handlers/profile_test.go | 37 ++++++++++- web/templates/dashboard-server.html | 31 +--------- web/templates/partials/channel-region.html | 72 ++++++++++++++++++++++ 4 files changed, 125 insertions(+), 33 deletions(-) create mode 100644 web/templates/partials/channel-region.html diff --git a/internal/http/handlers/profile.go b/internal/http/handlers/profile.go index 6fa3ecd..4a6501c 100644 --- a/internal/http/handlers/profile.go +++ b/internal/http/handlers/profile.go @@ -514,8 +514,22 @@ func (h *ProfileHandler) SetGuildChannel(w http.ResponseWriter, r *http.Request) redirectPath := "/dashboard/servers/" + guildID if r.Header.Get("HX-Request") == "true" { - w.Header().Set("HX-Redirect", redirectPath) - w.WriteHeader(http.StatusOK) + var registeredCount int64 + if count, err := h.discordReg.CountRegisteredUsers(r.Context(), guildID); err != nil { + slog.WarnContext(r.Context(), "set guild channel: count registered users", "guild_id", guildID, "error", err) + } else { + registeredCount = count + } + data := map[string]any{ + "GuildID": guildID, + "IsAdmin": true, + "ChannelConfigured": true, + "ChannelName": channelName, + "CurrentChannelID": channelID, + "TextChannels": channels, + "RegisteredCount": registeredCount, + } + h.renderer.Partial(w, http.StatusOK, "channel-region", data) return } http.Redirect(w, r, redirectPath, http.StatusSeeOther) diff --git a/internal/http/handlers/profile_test.go b/internal/http/handlers/profile_test.go index 74a8d88..31945d4 100644 --- a/internal/http/handlers/profile_test.go +++ b/internal/http/handlers/profile_test.go @@ -126,6 +126,11 @@ func newProfileRealTemplateRenderer(t *testing.T) *handlers.TemplateRenderer { } func serveProfileRequest(t *testing.T, user db.User, handler http.HandlerFunc, method, target string, form url.Values) *httptest.ResponseRecorder { + t.Helper() + return serveProfileRequestWithHeaders(t, user, handler, method, target, form, nil) +} + +func serveProfileRequestWithHeaders(t *testing.T, user db.User, handler http.HandlerFunc, method, target string, form url.Values, headers map[string]string) *httptest.ResponseRecorder { t.Helper() body := strings.NewReader("") if form != nil { @@ -135,6 +140,9 @@ func serveProfileRequest(t *testing.T, user db.User, handler http.HandlerFunc, m if form != nil { req.Header.Set("Content-Type", "application/x-www-form-urlencoded") } + for k, v := range headers { + req.Header.Set(k, v) + } tp, err := auth.IssueAccessToken(user.ID, user.Email, testJWTSecret, 15*time.Minute) if err != nil { t.Fatalf("IssueAccessToken: %v", err) @@ -173,7 +181,7 @@ func TestGuildPageRendersChannelSelectForManager(t *testing.T) { body := string(bodyBytes) for _, want := range []string{ `hx-post="/dashboard/servers/guild-1/channel"`, - ` - {{$currentChannelID := .CurrentChannelID}} - {{range .TextChannels}} - - {{end}} - - - - - {{end}} - {{end}} + {{template "channel-region" .}} {{if .IsRegistered}}
You're registered to have results sent to this server.
diff --git a/web/templates/partials/channel-region.html b/web/templates/partials/channel-region.html new file mode 100644 index 0000000..7ff8883 --- /dev/null +++ b/web/templates/partials/channel-region.html @@ -0,0 +1,72 @@ +{{define "channel-region"}} +
+ {{if .ChannelConfigured}} + {{if .ChannelName}} +
Posting results to #{{.ChannelName}}
+ {{else}} +
A results channel is configured.
+ {{end}} + {{else}} +
+ No channel configured yet. Go to the channel you want results in and run + /setchannel. +
+ {{end}} + + {{if .IsAdmin}} +
Users registered: {{.RegisteredCount}}
+ {{if .TextChannels}} +
+ + +
+ + + + + + {{end}} + {{end}} +
+{{end}}