Include slot claimers in the Going list

The Going section now shows both RSVPs and people who claimed slots,
deduplicated by name (case-insensitive). Claim-only people don't get a
remove button—they unclaim from the slot card instead.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-17 08:12:09 -04:00
parent 7b0efb3c45
commit b3203a7506
2 changed files with 28 additions and 4 deletions
+22
View File
@@ -121,10 +121,17 @@ type SlotView struct {
Pct int64
}
type GoingPerson struct {
Name string
Note string
RsvpID int64
}
type EventPageData struct {
Event db.Event
Slots []SlotView
Rsvps []db.Rsvp
GoingList []GoingPerson
TotalGoing int64
IsAdmin bool
BaseURL string
@@ -180,6 +187,20 @@ func (s *Server) loadEventPage(r *http.Request, slug string, isAdmin bool) (*Eve
}
totalGoing += int64(len(rsvps))
// Build deduplicated GoingList: RSVPs first, then claim-only people
var goingList []GoingPerson
seen := make(map[string]bool)
for _, r := range rsvps {
goingList = append(goingList, GoingPerson{Name: r.Name, Note: r.Note, RsvpID: r.ID})
seen[strings.ToLower(r.Name)] = true
}
for _, c := range claims {
if !seen[strings.ToLower(c.Name)] {
goingList = append(goingList, GoingPerson{Name: c.Name})
seen[strings.ToLower(c.Name)] = true
}
}
var descHTML template.HTML
if event.Description != "" {
descHTML = RenderMarkdown(event.Description)
@@ -189,6 +210,7 @@ func (s *Server) loadEventPage(r *http.Request, slug string, isAdmin bool) (*Eve
Event: event,
Slots: slotViews,
Rsvps: rsvps,
GoingList: goingList,
TotalGoing: totalGoing,
IsAdmin: isAdmin,
BaseURL: s.baseURL,