Dedupe RSVPs and add tests for auto-RSVP on claim

Add migration to clean up duplicate RSVPs (keep earliest per event+name).
Add GetRsvpByName and DeleteDuplicateRsvps queries. Tests cover auto-RSVP
creation, duplicate prevention, and case-insensitive matching.

Co-Authored-By: Claude Opus 4.6 <noreply@anthropic.com>
This commit is contained in:
2026-05-18 22:55:21 -04:00
parent 087becdf58
commit fe5cdd92a1
4 changed files with 186 additions and 0 deletions
+5
View File
@@ -72,6 +72,11 @@ SELECT COUNT(*) FROM rsvps WHERE event_id = ?;
-- name: GetRsvpByName :one
SELECT * FROM rsvps WHERE event_id = ? AND name = ? COLLATE NOCASE LIMIT 1;
-- name: DeleteDuplicateRsvps :exec
DELETE FROM rsvps WHERE id NOT IN (
SELECT MIN(id) FROM rsvps GROUP BY event_id, name COLLATE NOCASE
);
-- name: GetUserByPhone :one
SELECT * FROM users WHERE phone = ?;
+11
View File
@@ -232,6 +232,17 @@ func (q *Queries) DeleteClaim(ctx context.Context, id int64) error {
return err
}
const deleteDuplicateRsvps = `-- name: DeleteDuplicateRsvps :exec
DELETE FROM rsvps WHERE id NOT IN (
SELECT MIN(id) FROM rsvps GROUP BY event_id, name COLLATE NOCASE
)
`
func (q *Queries) DeleteDuplicateRsvps(ctx context.Context) error {
_, err := q.db.ExecContext(ctx, deleteDuplicateRsvps)
return err
}
const deleteEvent = `-- name: DeleteEvent :exec
DELETE FROM events WHERE id = ?
`