public void Process(CaseReported @event) { var caseReport = _caseReports.GetById(@event.Id); if (caseReport == null) { caseReport = new CaseReport { Id = @event.Id, DataCollectorId = @event.DataCollectorId, HealthRiskId = @event.HealthRiskId, Location = @event.Location, SubmissionTimestamp = @event.CaseOccured }; } else { caseReport.Id = @event.Id; caseReport.DataCollectorId = @event.DataCollectorId; caseReport.HealthRiskId = @event.HealthRiskId; caseReport.Location = @event.Location; caseReport.SubmissionTimestamp = @event.CaseOccured; } _caseReports.Save(caseReport); var disease = _healthRisks.GetById(caseReport.HealthRiskId) ?? new HealthRisk { Id = @event.HealthRiskId, ThresholdTimePeriodInDays = 7, ThresholdNumberOfCases = 3 }; var latestReports = _caseReports.GetCaseReportsAfterDate( DateTime.UtcNow.Subtract(TimeSpan.FromDays(disease.ThresholdTimePeriodInDays)), caseReport.HealthRiskId); if (latestReports.Count > disease.ThresholdNumberOfCases) { var alert = _alerts.Get(caseReport.HealthRiskId, caseReport.Location); if (alert == null) { alert = new Alert { Id = Guid.NewGuid(), HealthRiskId = caseReport.HealthRiskId, Location = caseReport.Location, }; } alert.CaseReports.Add(caseReport); _alerts.Save(alert); // Todo: Temporary fix - we're not supposed to do this, awaiting the new Policy building block in doLittle to be ready var stream = new UncommittedEventStream(null); stream.Append(new AlertRaised(), EventSourceVersion.Zero.NextCommit()); _uncommittedEventStreamCoordinator.Commit(TransactionCorrelationId.New(), stream); _feedbackService.SendFeedbackToDataCollecorsAndVerifiers(latestReports); } }
/// <summary> /// /// </summary> /// <param name="eventSourceId"></param> /// <param name="@event"></param> protected void Apply(EventSourceId eventSourceId, IEvent @event) { var transactionCorrelationId = TransactionCorrelationId.New(); var eventSource = GetEventSourceForThisController(eventSourceId); eventSource.Apply(@event); _uncommittedEventStreamCoordinator.Commit(transactionCorrelationId, eventSource.UncommittedEvents); }
void ApplyEvent(IEvent @event) { // Todo: Temporary fix - we're not supposed to do this, awaiting the new Policy building block in doLittle to be ready var stream = new UncommittedEventStream(null); stream.Append(@event, EventSourceVersion.Zero.NextCommit()); _uncommittedEventStreamCoordinator.Commit(TransactionCorrelationId.New(), stream); }
/// <inheritdoc/> public void Commit() { var trackedObjects = GetObjectsBeingTracked(); foreach (var trackedObject in trackedObjects) { var events = trackedObject.UncommittedEvents; if (events.HasEvents) { _uncommittedEventStreamCoordinator.Commit(TransactionCorrelationId, events); trackedObject.Commit(); } } }
public void Commit() { var trackedObjects = GetObjectsBeingTracked(); foreach (var trackedObject in trackedObjects) { var events = trackedObject.UncommittedEvents; if (events.HasEvents) { events.MarkEventsWithCommandDetails(Command); events.ExpandExecutionContext(ExecutionContext); _uncommittedEventStreamCoordinator.Commit(events); trackedObject.Commit(); } } }
/// <inheritdoc/> public void Commit() { _logger.Information("Commit transaction"); var trackedObjects = GetObjectsBeingTracked(); _logger.Trace($"Total number of objects tracked '{trackedObjects.Count()}"); foreach (var trackedObject in trackedObjects) { _logger.Trace($"Committing events from {trackedObject.GetType().AssemblyQualifiedName}"); var events = trackedObject.UncommittedEvents; if (events.HasEvents) { _logger.Trace("Events present - send them to uncommitted eventstream coordinator"); _uncommittedEventStreamCoordinator.Commit(CorrelationId, events); _logger.Trace("Commit object"); trackedObject.Commit(); } } }
public void Replay <T>( IEnumerable <T> events, Func <T, Guid> getIdCallback, Action <IEventSource, T> eventSourceCallback = null) where T : IEvent { events.ForEach(@event => { try { var eventSource = new ExternalSource(getIdCallback(@event)); eventSource.Apply(@event); if (eventSourceCallback != null) { eventSourceCallback(eventSource, @event); } _uncommittedEventStreamCoordinator.Commit(TransactionCorrelationId.New(), eventSource.UncommittedEvents); } catch (Exception exception) { _logger.Error(exception, "Problem applying event"); } }); }
public async Task Post([FromBody] Event @event) { var eventType = _typeFinder.All.Where(type => type.Name == @event.Name).SingleOrDefault(); if (eventType == null) { throw new ArgumentException("Cannot resolve Event Type from Name - please check the name again"); } var serialized = JsonConvert.SerializeObject(@event.Content); var eventInstance = JsonConvert.DeserializeObject(serialized, eventType) as IEvent; var eventSource = new EventsControllerEventSource(@event.EventSourceId); eventSource.Apply(eventInstance); _uncommittedEventStreamCoordinator.Commit( TransactionCorrelationId.New(), eventSource.UncommittedEvents); await Task.CompletedTask; }