Skip to main content

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.
  • isActivetrue once the event has been published. Most editing mutations refuse to run while isActive: true.
  • isCompletedtrue once the event is over. Effectively all mutations refuse to run while isCompleted: 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.
  • coverImageBlobFile holding 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:

MutationDraftPublishedCompleted
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