Event Visibility
Event visibility controls who can see guild events. Applies only to guild-scope events. Group events do not use visibility (left open for future personal/group visibility).
Visibility Levels
| Visibility | Who can see |
|---|---|
| public | Everyone, including non-guild members and unauthenticated users |
| guild | Guild members only |
| invite_only | Only guild members who have been invited (participation with invited status) |
Schema
enum EventVisibility {
public // Everyone can see
guild // Guild members only
invite_only // Only invited guild members
}
model Event {
// ...
visibility EventVisibility? // Null for group events
}
- Nullable: Group events have
visibility = null; future expansion for personal/group visibility. - Default for guild events:
guild(guild members only) for backwards compatibility.
Invite Flow
For invite_only events:
- Officer invites guild members → creates
Participationwithstatus: invited - Invited users see the event in the list and can view details
- Invited users can sign up (confirm) or decline
- Non-invited guild members do not see the event
Pending Invites (Unclaimed Roster)
Officers can invite unclaimed roster entries (GuildMember without a claimed character). This creates a PendingEventInvite. When the user later claims their character (via character sync or roster sync), the pending invite is converted to a Participation with status: invited. The roster displays "Invited (pending claim)" until they claim.
API Behavior
- GET /guilds/:guildId/events: Filter by visibility + viewer context (guild member? invited?)
- GET /events/:id: Return 404 if viewer not allowed per visibility rules
- GET /events/:id/inviteable-users: Returns guild members with
userIdanddisplayNamewho are not yet participating (for officers to invite) - POST /events/:id/invite: Officer invites guild member; creates participation with
status: invited - POST /events/:id/signup: Enforce visibility (invite_only = must have been invited; confirming invite updates participation)
Future: Group & Personal Events
The model keeps group events flexible. Future expansion may add:
- Personal events (user's own calendar)
- Group visibility (e.g. "friends only", "subgroup")
Visibility is scoped to guild events only for now.