public EventLocation(IEnumerable <EventsPublishedByService> allServices, EventsSubscribedByService eventsSubscribedByService) { var readModels = eventsSubscribedByService.ReadModelSubcriptions.ToList(); var handleAsyncEvents = eventsSubscribedByService.Events.ToList(); UnresolvedEventSubscriptions = handleAsyncEvents; UnresolvedReadModeSubscriptions = readModels; foreach (var service in allServices) { var relevantEventsOfService = handleAsyncEvents.Where(ev => service.PublishedEventTypes.Contains(ev)).ToList(); var relevantEvents = relevantEventsOfService.Select(relevantEvent => { var notFoundProperties = GetDiffOfProperties(relevantEvent, service); return(new EventSchema(relevantEvent.Name, notFoundProperties)); }).ToList(); var relevantReadModelsService = readModels.Where(r => service.PublishedEventTypes.Contains(r.GetsCreatedOn)).ToList(); var relevantReadModels = relevantReadModelsService.Select(readModel => { var createdEvent = readModel.GetsCreatedOn; var notFoundProperties = GetDiffOfProperties(createdEvent, service); return(new ReadModelSubscription( readModel.ReadModelName, new EventSchema(createdEvent.Name, notFoundProperties))); }).ToList(); if (!relevantEvents.Any() && !relevantReadModels.Any()) { continue; } SetDomainEventLocation(MicrowaveServiceNode.Create(service.ServiceEndPoint, relevantEvents, relevantReadModels)); UnresolvedEventSubscriptions = UnresolvedEventSubscriptions.Except(relevantEvents); UnresolvedReadModeSubscriptions = UnresolvedReadModeSubscriptions.Except(relevantReadModels); } }
public EventLocationFake() : base(new List <MicrowaveServiceNode> { MicrowaveServiceNode.Create(new ServiceEndPoint(new Uri("http://luls.de/")), new List <EventSchema> { new EventSchema(nameof(Ev1)) }, new List <ReadModelSubscription>()), MicrowaveServiceNode.Create(new ServiceEndPoint(new Uri("http://troll.de/")), new List <EventSchema> { new EventSchema(nameof(Ev2)) }, new List <ReadModelSubscription>()), MicrowaveServiceNode.Create(new ServiceEndPoint(new Uri("http://troll2.de/")), new List <EventSchema>(), new List <ReadModelSubscription> { new ReadModelSubscription(nameof(IdQuery), new EventSchema(nameof(Ev2))) }) }, new List <EventSchema>(), new List <ReadModelSubscription>()) { }
public async Task <EventLocation> GetEventLocation() { if (_cache.HasValue) { return(_cache.GetValue()); } var mongoCollection = _database.GetCollection <EventLocationDbo>(StatusDbName); var location = await mongoCollection.FindSync(e => e.Id == nameof(EventLocation)).SingleOrDefaultAsync(); return(location == null?EventLocation.Default() : new EventLocation(location.Services.Select(s => MicrowaveServiceNode.Create(s.ServiceEndPoint, s.SubscribedEvents, s.ReadModels)), location .UnresolvedEventSubscriptions, location.UnresolvedReadModeSubscriptions)); }