This is a definition of an individual performance linked to an event. The app surfaces then use the end time of this to render current and future performances based on date ranges (Your Stay, Today, Tomorrow, This Week, This Month, All, Specific Date)
The soldout flag is currently read by the app surfaces, but unused in any rendering or logic - however this is on our roadmap as some booking engines we integrate can include this data for us.
The optional url is on a performance by performance level, so as in the example below can include a structure or parameters to navigate to start booking on this specific performance
{
"id": "11575_1687885200",
"event": 11575,
"start": 1687885200,
"end": 1687889700,
"soldout": false,
"url": "https://your-events-booking-engine.com/book/11575/2023-06-27/1800"
}Type : String - Required
This is a unique key for each performance. In the holidaymaker CMS this is a composite key of the event ID and start time as a string
Type : Epoch Date/Time Integer - Required
Start date and time of the event. This is generated while in the 'Europe/London' time zone and is read in the app in the same way.
Type : Epoch Date/Time Integer - Required
End date and time of the event. This is generated while in the 'Europe/London' time zone and is read in the app in the same way. In the holidaymaker CMS this is generated simply by adding the events runtime minutes onto the start time.
Type : Boolean - Optional
Optional flag to show that a performance is soldout / at capacity. This is read by the app surfaces but currently unused. Future roadmap feature is to render this performances differently and/or filter them out
Type : Url String - Optional
This is the url a user will navigate to when clicking the 'book' button by a time when it is rendered. If an event is not considered bookable then this can be omitted, or can be empty. This url can navigate to this specific event to start booking, or to a generic booking event listing where the user can choose the time/date again.
As we connect to different systems using a range of different languages, we can interpret several things as a true. Generally speaking holidaymaker will use a standard true/false JSON boolean, however we also read a lower case string and checked if they are "1", "true", "yes", or "on" to then create the positive boolean. Unless explicitly noted, all booleans are defaulted as false if the node doesn't exist.
{
"optionOne": true,
"optionTwo": false,
"allTheseAreValidTrues" : [
1, "1", true, "true", "on", "yes"
]
}When dealing with time, as well as dates, our data packets will typically use an epoch integer. Our date/times will normally be in UTC/GMT - unless it will be a renderable time to the end user, when it currently will use the 'Europe/London' timezone to take into account daylight savings time.
{
"lastChange": 1691481892,
"time": 1691398800,
"endTime": 1691402400
}Standard JSON Integer - 0 is commonly considered to be a default value, unless it is an valid ID when -1 is used. For sort priorities 99 is used as the default.
{
"key1": 9,
"key2": 42,
"arrayOfInts": [
2,
3,
5,
8
]
}Standard JSON String - Often will have certain characters escaped depending what system is writing the JSON packet, however our parser only requires to have double quotes (") escaped. UTF-8 encoding is our standard, but others may be accepted if required. If line breaks are required in the text then the Rich Text / Multiline String type is used instead.
{
"key1": "A string value",
"key2": "Another string with an some \"quotes\" that need escaping",
"arrayOfStrings": [
"Item one as a string",
"Item two as a string",
"Item three as a string",
]
}A Url is sent the same as a string. If our system knows this is a url it will check if it starts with http or https - Note that navigating from both iOS and Android should use https.
{
"bookingUrl" : "https://portal.managebooking.pmssystem"
}Added 'soldout' property