External attendees on SGA Space bookings (#132) - #137
Merged
Merged
Conversation
An SGA Space booking could only list Chambers users, so an interview candidate or a guest from another office couldn't be put on it or sent its invite. Typing an @northeastern.edu address in the attendee search now offers to add it when no Chambers user has that address, and it shows as a dashed chip. Addresses are stored in a new external_attendees column on bookings and series, validated to @northeastern.edu and capped at 25. Every place that works out who to email -- create, edit (added/removed diff), cancel, blackout cascades, and all three series routes -- resolves attendees through attendeeKeys, where an external address is an `email:` key that resolveSpacesAddresses maps to itself. So external attendees get the same invites, updates and cancellations as everyone else. The room display counts them as "Guest" instead of showing their address. Co-Authored-By: Claude Opus 5 <[email protected]>
Contributor
|
The latest updates on your projects. Learn more about Vercel for GitHub.
|
Applied to production as 20260917004809_space_external_attendees; contents unchanged. The rollback's header now names the renamed file. Co-Authored-By: Claude Opus 5 <[email protected]>
pataniaeli
added a commit
that referenced
this pull request
Sep 18, 2026
Resolves the conflict #137 predicted: #132 (external attendees) and this branch each added a field to the same series PATCH destructuring, week and series updates, and the modal's series submit body. Both are kept -- space_id from #127 and external_attendees from #132. Every place this branch moved the series onto the new spaceId is unchanged. Co-Authored-By: Claude Opus 5 <[email protected]>
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Closes #132
What changed
SGA Space bookings can now include people without a Chambers account, e.g. an interview candidate.
@northeastern.eduaddress in Add Attendees. If no Chambers user has that exact address, the dropdown offers Add (Enter works too). Someone who does have an account is still added as themselves, so their chosen inbox (The Benedikt Option (TM) #109) applies. External attendees show as dashed chips.How
external_attendees text[]column onspace_bookingsandspace_booking_series.@northeastern.edu(the same pattern as SGA inboxes), caps the list at 25, and rejects the whole request if any address is invalid.attendeeKeys(row)inlib/spaces-email.tsreturns user ids plus anemail:<address>key for each external attendee, andresolveSpacesAddressesmaps those keys to the address itself. Every existing "who to email" calculation (added, dropped, cancellation To/Bcc) therefore covers both kinds of attendee without a second code path.Migration: already applied to production
supabase/migrations/20260917004809_space_external_attendees.sql, with a rollback script. The file is renamed from20260916010000to the version production recorded; its contents are unchanged.external_attendees text[] not null default '{}'tospace_bookingsandspace_booking_series, with acardinality <= 25check on each. Verified both columns and constraints are in place after applying.devnever touches the column, so it's unaffected. This PR's code can now deploy.Note
PR #134 (#127) also touches the series PATCH destructuring and the modal's series submit body, so whichever merges second will have a small, mechanical conflict.
Testing
tsc --noEmitclean.eslinton changed files is clean apart from one warning that was already there.🤖 Generated with Claude Code