예제 #1
0
        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;
        }
예제 #2
0
 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));
 }