public IActionResult Post([FromBody] JArray requestJArray) { var requestContent = requestJArray.ToString(); _logger.LogInformation($"Received events: {requestContent}"); EventGridSubscriber eventGridSubscriber = new EventGridSubscriber(); EventGridEvent[] eventGridEvents = eventGridSubscriber.DeserializeEventGridEvents(requestContent); foreach (EventGridEvent eventGridEvent in eventGridEvents) { if (eventGridEvent.Data is SubscriptionValidationEventData eventData) { _logger.LogInformation($"Got SubscriptionValidation event data, validationCode: {eventData.ValidationCode}, validationUrl: {eventData.ValidationUrl}, topic: {eventGridEvent.Topic}"); // Do any additional validation (as required) such as validating that the Azure resource ID of the topic matches // the expected topic and then return back the below response var responseData = new SubscriptionValidationResponse() { ValidationResponse = eventData.ValidationCode }; return(Ok(responseData)); } else { var statement = new StatementExtension((JObject)eventGridEvent.Data); var statementWrapper = new StatementWrapper(eventGridEvent.Subject, statement); _decisionChannel.Next(statementWrapper); } } return(Ok(null)); }
private async Task HandleStatement(StatementWrapper statementWrapper) { try { var decisionStatement = await new PersonApplicationService().MakeDecisionAsync(statementWrapper.Data, _personRepository); var decisionStatementWrapper = new StatementWrapper(statementWrapper.Subject, decisionStatement); _decisionChannel.Next(decisionStatementWrapper); } catch (Exception exception) { _logger.LogError("Exception handling statement for person aggregate: " + exception.Message); _logger.LogError(exception.StackTrace); } }