← Back to Core Domains

4.6 Gatherings

Gatherings are tenant-local events. Core owns event identity, dates and location, host branch/type, publication and cancellation state, staff, activities, schedules, attendance, public pages, and calendar output. Plugins may attach feature data through associations, cells, and workflow providers.

Main model

GatheringsTable uses timestamps, footprint auditing, soft deletion, and public IDs. Its principal associations are:

Use public IDs for public-facing URLs. Internal numeric IDs remain tenant-local and must not be treated as globally unique.

Lifecycle

GatheringsController supports draft creation/editing, publication, cancellation/uncancellation, soft deletion, cloning, staff and activity management, schedules, attendance, public views, calendar views, feeds, and mobile calendar data. Policy methods cover domain actions such as publish, cancel, calendar, attendance, and steward access in addition to CRUD.

Controllers coordinate requests; reusable mutations live in:

Do not reproduce these mutations in plugin controllers.

Public and authenticated views

Public landing and calendar endpoints expose only publishable event data selected by their controller queries. Authenticated index/grid/export endpoints must apply GatheringsTablePolicy scope. A public ID does not make an unpublished gathering public.

Extension points

Plugins should attach gathering features without modifying core templates:

The Awards plugin links bestowals and gathering activities; Activities supplies configurable activity definitions; Waivers derives required collection behavior from gathering activities.

Multi-tenant rules

All related rows, cached calendar results, documents, and workflow instances belong to the active tenant. Public endpoints still pass through host-based tenant resolution. Background reminders or workflow schedules must bind the tenant before querying dates or sending mail.