public void RequestAppointmentSetOfADay(Action <FixedAppointmentSet> appointmentSetAvailable,
                                                AggregateIdentifier id, Action <string> errorCallback)
        {
            if (cachedDayReadmodels.ContainsKey(id))
            {
                var readModel = cachedDayReadmodels[id];
                appointmentSetAvailable(new FixedAppointmentSet(readModel.Identifier,
                                                                readModel.AggregateVersion,
                                                                readModel.Appointments));
                return;
            }

            connectionService.RequestAppointmentsOfADay(
                (appointments, aggregateId, aggregateVersion) =>
            {
                medicalPracticeRepository.RequestMedicalPractice(
                    practice =>
                {
                    var newReadModel = new AppointmentsOfADayReadModel(eventBus,
                                                                       patientsRepository,
                                                                       labelRepository,
                                                                       practice,
                                                                       appointments,
                                                                       aggregateId,
                                                                       aggregateVersion,
                                                                       errorCallback);
                    if (!cachedDayReadmodels.ContainsKey(aggregateId))
                    {
                        cachedDayReadmodels.Add(aggregateId, newReadModel);
                    }

                    appointmentSetAvailable(new FixedAppointmentSet(newReadModel.Identifier,
                                                                    newReadModel.AggregateVersion,
                                                                    newReadModel.Appointments));
                },
                    aggregateId.MedicalPracticeId,
                    aggregateId.PracticeVersion,
                    errorCallback
                    );
            },
                id.Date,
                id.MedicalPracticeId,
                errorCallback
                );
        }
        public void RequestLastestReadModelVersion(Action <uint> readModelVersionAvailable, AggregateIdentifier id, Action <string> errorCallback)
        {
            if (cachedDayReadmodels.ContainsKey(id))
            {
                readModelVersionAvailable(cachedDayReadmodels[id].AggregateVersion);
                return;
            }

            connectionService.RequestAppointmentsOfADay(
                (appointments, aggregateId, aggregateVersion) =>
            {
                medicalPracticeRepository.RequestMedicalPractice(
                    practice =>
                {
                    var newReadModel = new AppointmentsOfADayReadModel(eventBus,
                                                                       patientsRepository,
                                                                       labelRepository,
                                                                       practice,
                                                                       appointments,
                                                                       aggregateId,
                                                                       aggregateVersion,
                                                                       errorCallback);
                    if (!cachedDayReadmodels.ContainsKey(aggregateId))
                    {
                        cachedDayReadmodels.Add(aggregateId, newReadModel);
                    }

                    readModelVersionAvailable(cachedDayReadmodels[id].AggregateVersion);
                },
                    aggregateId.MedicalPracticeId,
                    aggregateId.PracticeVersion,
                    errorCallback
                    );
            },
                id.Date,
                id.MedicalPracticeId,
                errorCallback
                );
        }