Product Domain
Product is at the heart of what we do. Each product represents a “thing to do” somewhere in the world. We sell products via Partners to Consumers. At its most simple level, a Product is a name and description of the thing to do but there is a lot of metadata that provides rich content, and taxonomy attached to each Product.
In most cases, we source products from other systems which we refer to as sources. Our source integration systems poll each source overnight to gather information about the new or changed products and update the details in our systems accordingly. This process includes validating product and flagging some product as off sale either because it fails some form of validation or because it is no longer available from the source system.
When a consumer is considering booking a product our source integration systems will immediately poll the source systems for current availability and pricing and this will be displayed to the consumer.
When a consumer makes a booking we persist details of the booking in our own systems but also pass the booking back to the source system and obtain tickets and any other information relevant information which is then added to our vouchers and emailed to the consumer.
We also enable partners and their suppliers to directly create and maintain products within our database. These are known and “internally sourced products”.
The following tables are defined in the product domain:
Product - The primary table for this domain. Stores the header record for a product providing a unique
idandcode
NOTE: The name and description columns in this table are deprecated with the true data being stored in the ROOT records on the ProductContent as may pertain to any specific-language.ProductContent - Stores a language-specific name, description pair for any item of content relating to a given product. This table includes a
typewhich can be one of “ROOT”, “INCLUSION”, “ITINERARY”, “MEETING_POINT” and many more. The ROOT record stores the name and description of the product, these details are NOT held in the header record as they must be available in multiple languages. Our productTranslateService can be passed aproductIdalong with source and targetlanguageId, This will create new records in ProductContent with machine-translated content for the name and description. The description is held in a JSON format (specifically Slate) that separates markup form text and this enables the translation service to maintain markup such as bullet points. Our API is able to parse this format and return versions of the content in PlainText, HTML, Markdown and the original SlateJSONProductImage - A record of each image for a product. One image per product will be identified as the PRIMARY image with all others being a member of the galery. The actual image files are stored in AWS S3 and can be served at any resolution through our image service and global cache.
ProductAttributeAssociation - A record of each attribute attached to a product.
ProductCategoryAssociation - A record of each category attached to a product.
ProductCancellationPenalty - A record of each element of the cancellation policy for the product. Cancellation policies can be seasonal and so the start and end dates in the records must be considered. The actual cancellation policy will be delivered via the API at runtime and in the requested language.
ProductAvailability - DEPRECATED.
ProductAddition - A record of each addition that may be purchased when booking this product. Examples include ski hire, meals and premium services.
ProductCommission - A record that, if present, overrides the SupplierCommission and provides detail on the commission the company will receive when selling this product.
ProductDocument - A record of documents that have been linked to the product and may be viewed and downloaded by the consumer. Examples include health and safety briefings, menus and detailed itineraries.
ProductAttachment - see EntityAttachment
ProductGuideLanguageAssociation - A record of languages that are spoken by the guides that will accompany the consumer when participating in a product.
ProductLanguageAssociation - DEPRECATED
ProductMeta - A record of values of enumerated types that provide other information about the product. Data from this table may be interpreted by the API and returned in either a data-aware and/or language-specific way.
ProductSaleRestriction - A record of any restrictions that have been applied to this product. The existence of ANY sale restriction prevents the product from being available for purchase. SaleRestrictions can be added by the system or by administrators and generally relate to quality issues with the data. A product that is no longer available from a source system will have permanent saleRestriction added and this is equivalent to soft deletion. Full deletion of product is rare as this would cause integrity issue of the product has ever been the subject of a booking.
ProductSourceMeta -
ProductStartTime - A record of the times of day that a product can begin at and of the expected duration of the activity.
ProductSupplyMaster - DEPRECATED.
ProductTranslation - DEPRECATED
ProductReview - A rec.ord of any consumer reviews captured for the product either directly via our own consumers or as may have been imported from the source or from 3rd parties