Skip to main content

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

VisibilityWho can see
publicEveryone, including non-guild members and unauthenticated users
guildGuild members only
invite_onlyOnly 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:

  1. Officer invites guild members → creates Participation with status: invited
  2. Invited users see the event in the list and can view details
  3. Invited users can sign up (confirm) or decline
  4. 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 userId and displayName who 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.