Our travel industry client, operating across three continents and several countries, wants to standardize the process of choosing travel packages, air routes, hotels, and hundreds of other travel options. Today, local travel agencies decide themselves what they want to offer or not. The idea is to let them make decisions still, but with some constraints coming from global marketing.
Technically speaking, we need the following:
- Three level of players -
Global
,Continent
, andCountry
. - The process starts with
Global
, who will define which products the whole enterprise can work with. - After definition by
Global
,Continent
will be able to refine it, but always inside the boundaries defined byGlobal
. - After refinement by
Continent
, the same will apply forCountry
. They can refine even more what was defined byContinent
, but again inside the boundaries coming fromGlobal
andContinent
. - The system must then be able to support hundreds of definitions made by
Global
- one definition per attribute (air travel, hotel, ship, etc.). For each definition made byGlobal
, we can have up to three definitions made byContinent
(one per continent) that are derived fromGlobal
and inside each continent (up ton
definitions made by then
countries from that continent). - If
Global
edits an already existing definition, it must be communicated to continents and countries. That means dozens of definitions need to be notified and changed. And this is where I am stuck.
A simple example to visualize the business requirements:
Global
defines that hotel A, B, C, and D are available.Continent
then says that they want to work only with A, B, and C because D has a bad reputation inside the continent.Country
then says that they want to narrow down the list more, they are willing to work only with A and B, because C does not follow the religious rules of the country.
In this very simple case, we need to hold three definitions for the same domain (one for Global
, one for Continent
, and finally one for Country
).
Question
What is the best way to communicate to local users that a change has been made by Global
or Continent
?
Assumption: I will create only one service to handle this requirement.
I was considering using queues, however the service will then be both producer and consumer, which seems a bit odd to me. Has anyone faced a similar challenge and found a satisfactory solution?