public async Task HandleAsync(UserDeletionCompletedIntegrationEventFailure integrationEvent, CancellationToken cancellationToken) { var message = $"Could not finish {nameof(Account)} deletion process."; _logger.LogIntegrationEventError(ServiceComponentEnumeration.RivaIdentity, integrationEvent, "accountId={accountId}, message={message}, reason={reason}, code={code}", integrationEvent.UserId, message, integrationEvent.Reason, integrationEvent.Code); var accountDeletionCompletedIntegrationEventFailure = new AccountDeletionCompletedIntegrationEventFailure( integrationEvent.CorrelationId, integrationEvent.Code, integrationEvent.Reason, integrationEvent.UserId); var accountDeletionCompletedIntegrationEventFailureTask = _integrationEventBus.PublishIntegrationEventAsync(accountDeletionCompletedIntegrationEventFailure); try { var domainEvents = await _domainEventStore.FindAllAsync(integrationEvent.UserId); var accountCreatedDomainEvent = (AccountCreatedDomainEvent)domainEvents.First(x => x is AccountCreatedDomainEvent); var account = Account.Builder() .SetId(accountCreatedDomainEvent.AggregateId) .SetEmail(accountCreatedDomainEvent.Email) .SetConfirmed(accountCreatedDomainEvent.Confirmed) .SetPasswordHash(accountCreatedDomainEvent.PasswordHash) .SetSecurityStamp(accountCreatedDomainEvent.SecurityStamp) .SetCreated(accountCreatedDomainEvent.Created) .SetLastLogin(accountCreatedDomainEvent.LastLogin) .Build(); await _accountRepository.AddAsync(account); account.AddEvents(domainEvents); account.ApplyEvents(); await _accountRepository.UpdateAsync(account); } catch (Exception e) { _logger.LogIntegrationEventError(ServiceComponentEnumeration.RivaIdentity, integrationEvent, "userId={userId}, message={message}, stackTrace={stackTrace}", integrationEvent.UserId, e.Message, e.StackTrace); } await accountDeletionCompletedIntegrationEventFailureTask; }
private static bool IsPublishedIntegrationEventCorrect(AccountDeletionCompletedIntegrationEventFailure integrationEvent, Guid correlationId, Guid accountId, string code, string reason) { return(integrationEvent.CorrelationId == correlationId && integrationEvent.AccountId == accountId && integrationEvent.Code.Equals(code) && integrationEvent.Reason.Equals(reason)); }