Events
An event is something the board hosts that people can buy tickets to — a general assembly, a member dinner, a workshop. Events compose four related entities you'll mutate independently: the event itself, its dates, its location, and its ticket specifications.
Event
Top-level entity. Exposed fields:
id,name,description— identifiers and copy.isActive—trueonce the event has been published. Most editing mutations refuse to run whileisActive: true.isCompleted—trueonce the event is over. Effectively all mutations refuse to run whileisCompleted: true.isCommentAllowed,isCommentRequired,commentDescription— controls whether buyers can or must add a comment to their order.registrationEnd— deadline after which registration / ticket purchases close.maximumNumberOfTicketsForSale— total cap across all ticket specifications.coverImage—BlobFileholding the event's hero image.hasLocation— quick boolean for "this event has a physical venue", flipped by the location mutation.eventLocations: [EventLocation!]!eventDates: [EventDate!]!ticketSpecifications: [TicketSpecification!]!ticketInspectors: [TicketInspector!]!
Lifecycle
┌──────── editName, editDescription, editRegistrationEnd ────────┐
│ add/edit/remove EventDate, addOrEditEventLocation │
│ addTicketSpecification, editTicketSpecification, remove… │
│ addTicketInspector, removeTicketInspector │
▼ │
┌─────────┐ publish ┌─────────────┐ complete ┌────────────┐
│ Draft │ ──────────────► │ Published │ ───────────────► │ Completed │
│ (active │ │ (isActive: │ │ (isCompleted│
│ =false) │ ◄── unpublish ─ │ true) │ │ =true) │
└─────────┘ └─────────────┘ └────────────┘
│ │ │
│ most edits allowed │ most edits blocked │ no edits
│ delete allowed if no │ unpublish blocked if any │
│ tickets sold/reserved │ tickets sold/reserved │
The mutations enforce these rules — if you call e.g. editName on a published event, the server rejects with Cannot edit name for an event, which has already been published. The actual publish and complete transitions happen in the Unioo platform, not via this API; this API exposes unpublish (back from Published to Draft) and delete (only from Draft).
The full state-by-state matrix:
| Mutation | Draft | Published | Completed |
|---|---|---|---|
editName | ✓ | ✗ | ✗ |
addOrEditDescription | ✓ | ✓ | ✗ |
addOrEditRegistrationEnd | ✓ | ✗ | ✗ |
addEventDate | ✓ | ✗ | ✗ |
editEventDate | ✓ | ✗ | ✗ |
removeEventDate | ✓ | ✗ | ✗ |
addOrEditEventLocation | ✓ | ✗ | ✗ |
addTicketSpecification | ✓ | ✓ | ✗ |
editTicketSpecification | ✓ (only while inactive) | ✗ | ✗ |
editTicketSpecificationActiveState | ✓ | ✓ | ✗ |
removeTicketSpecification | ✓ | ✗ | ✗ |
addTicketInspector | ✓ | ✓ | ✗ |
removeTicketInspector | ✓ | ✓ | ✗ |
unpublishEvent | ✗ | ✓ (no sold tickets) | ✗ |
deleteEvent | ✓ (no sold tickets, no refunds in progress) | ✗ | ✗ |
EventDate
A start/end pair representing one slot of the event. An event can have multiple — a multi-day workshop spans several EventDate rows.
id,startDateTime,endDateTime.
When you add a new date to an event that already has ticket specifications, the new date is automatically attached to every existing specification.
EventLocation
A physical venue. The same event can carry several entries (e.g. a primary and an alternative), but most events use one. Fields: id, name, streetName, postalCode, city. When an event has no physical venue (online, TBD), use the hasNoLocation: true flag on addOrEditEventLocation instead — it sets event.hasLocation = false.
Where to query / mutate
- Read: Querying events.
- Write: Event details, Event dates, Event locations.
- Tickets are a separate concept — see Tickets.