コード例 #1
0
        public async Task HandleAsync(AccountDeletedIntegrationEvent integrationEvent, CancellationToken cancellationToken = default)
        {
            try
            {
                var user = await _userRepository.GetByIdAsync(integrationEvent.AccountId);

                user.AddDeletedEvent(integrationEvent.CorrelationId);
                await _communicationBus.DispatchDomainEventsAsync(user, cancellationToken);

                await _userRepository.DeleteAsync(user);

                var userDeletedIntegrationEvent = new UserDeletedIntegrationEvent(integrationEvent.CorrelationId, user.Id);
                await _integrationEventBus.PublishIntegrationEventAsync(userDeletedIntegrationEvent);
            }
            catch (Exception e)
            {
                _logger.LogIntegrationEventError(ServiceComponentEnumeration.RivaUsers, integrationEvent,
                                                 "userId={userId}, message={message}, stackTrace={stackTrace}", integrationEvent.AccountId,
                                                 e.Message, e.StackTrace);
                var userDeletionCompletedIntegrationEventFailure = new UserDeletionCompletedIntegrationEventFailure(
                    integrationEvent.CorrelationId, IntegrationEventErrorCodeEnumeration.UnexpectedError.DisplayName,
                    IntegrationEventErrorMessage.UnexpectedError, integrationEvent.AccountId);
                await _integrationEventBus.PublishIntegrationEventAsync(userDeletionCompletedIntegrationEventFailure);
            }
        }
コード例 #2
0
        public async Task HandleAsync_Should_Complete_Account_Deletion_With_Failure_When_UserDeletionCompletedIntegrationEventFailure_Is_Received()
        {
            var userDeletionCompletedIntegrationEventFailure = new UserDeletionCompletedIntegrationEventFailure(Guid.NewGuid(),
                                                                                                                DateTimeOffset.UtcNow, "AnyCode", "AnyReason", Guid.NewGuid());
            var          message    = $"Could not finish {nameof(Account)} deletion process.";
            const string logMessage = "accountId={accountId}, message={message}, reason={reason}, code={code}";
            var          logParams  = new object[]
            {
                userDeletionCompletedIntegrationEventFailure.UserId,
                message,
                userDeletionCompletedIntegrationEventFailure.Reason,
                userDeletionCompletedIntegrationEventFailure.Code
            };
            var accountCreatedDomainEvent = new AccountCreatedDomainEvent(
                userDeletionCompletedIntegrationEventFailure.UserId,
                userDeletionCompletedIntegrationEventFailure.UserId, "*****@*****.**", true, "PasswordHash",
                Guid.NewGuid(), DateTimeOffset.UtcNow, null);
            var domainEvents = new List <IDomainEvent> {
                accountCreatedDomainEvent
            };

            _loggerMock.Setup(x => x.LogIntegrationEventError(It.IsAny <ServiceComponentEnumeration>(),
                                                              It.IsAny <IIntegrationEvent>(), It.IsAny <string>(), It.IsAny <object[]>()))
            .Verifiable();
            _integrationEventBusMock.Setup(x => x.PublishIntegrationEventAsync(It.IsAny <IIntegrationEvent>()))
            .Returns(Task.CompletedTask)
            .Verifiable();
            _domainEventStoreMock.Setup(x => x.FindAllAsync(It.IsAny <Guid>())).ReturnsAsync(domainEvents);
            _accountRepositoryMock.Setup(x => x.AddAsync(It.IsAny <Account>())).Returns(Task.CompletedTask);
            _accountRepositoryMock.Setup(x => x.UpdateAsync(It.IsAny <Account>())).Returns(Task.CompletedTask);


            Func <Task> result = async() => await _userDeletionCompletedIntegrationEventFailure.HandleAsync(userDeletionCompletedIntegrationEventFailure);

            await result.Should().NotThrowAsync <Exception>();

            _loggerMock.Verify(x => x.LogIntegrationEventError(
                                   It.Is <ServiceComponentEnumeration>(s => Equals(s, ServiceComponentEnumeration.RivaIdentity)),
                                   It.Is <IIntegrationEvent>(ie => ie == userDeletionCompletedIntegrationEventFailure),
                                   It.Is <string>(m => m.Equals(logMessage)), It.Is <object[]>(p => !p.Except(logParams).Any())));
            _integrationEventBusMock.Verify(x => x.PublishIntegrationEventAsync(It.Is <IIntegrationEvent>(ie =>
                                                                                                          IsPublishedIntegrationEventCorrect((AccountDeletionCompletedIntegrationEventFailure)ie,
                                                                                                                                             userDeletionCompletedIntegrationEventFailure.CorrelationId, userDeletionCompletedIntegrationEventFailure.UserId,
                                                                                                                                             userDeletionCompletedIntegrationEventFailure.Code, userDeletionCompletedIntegrationEventFailure.Reason))));
        }
コード例 #3
0
        public async Task HandleAsync_Should_Complete_Account_Deletion_With_Failure_When_UserDeletionCompletedIntegrationEventFailure_Is_Received_And_Any_Exception_Is_Thrown()
        {
            var userDeletionCompletedIntegrationEventFailure = new UserDeletionCompletedIntegrationEventFailure(Guid.NewGuid(),
                                                                                                                DateTimeOffset.UtcNow, "AnyCode", "AnyReason", Guid.NewGuid());
            var          message    = $"Could not finish {nameof(Account)} deletion process.";
            const string logMessage = "accountId={accountId}, message={message}, reason={reason}, code={code}";
            var          logParams  = new object[]
            {
                userDeletionCompletedIntegrationEventFailure.UserId,
                message,
                userDeletionCompletedIntegrationEventFailure.Reason,
                userDeletionCompletedIntegrationEventFailure.Code
            };
            var          exception           = new Exception("Exception occured.");
            const string exceptionLogMessage = "userId={userId}, message={message}, stackTrace={stackTrace}";

            _loggerMock.Setup(x => x.LogIntegrationEventError(It.IsAny <ServiceComponentEnumeration>(),
                                                              It.IsAny <IIntegrationEvent>(), It.IsAny <string>(), It.IsAny <object[]>()))
            .Verifiable();
            _integrationEventBusMock.Setup(x => x.PublishIntegrationEventAsync(It.IsAny <IIntegrationEvent>()))
            .Returns(Task.CompletedTask)
            .Verifiable();
            _domainEventStoreMock.Setup(x => x.FindAllAsync(It.IsAny <Guid>())).ThrowsAsync(exception);


            Func <Task> result = async() => await _userDeletionCompletedIntegrationEventFailure.HandleAsync(userDeletionCompletedIntegrationEventFailure);

            await result.Should().NotThrowAsync <Exception>();

            _loggerMock.Verify(x => x.LogIntegrationEventError(
                                   It.Is <ServiceComponentEnumeration>(s => Equals(s, ServiceComponentEnumeration.RivaIdentity)),
                                   It.Is <IIntegrationEvent>(ie => ie == userDeletionCompletedIntegrationEventFailure),
                                   It.Is <string>(m => m.Equals(logMessage)), It.Is <object[]>(p => !p.Except(logParams).Any())));
            _integrationEventBusMock.Verify(x => x.PublishIntegrationEventAsync(It.Is <IIntegrationEvent>(ie =>
                                                                                                          IsPublishedIntegrationEventCorrect((AccountDeletionCompletedIntegrationEventFailure)ie,
                                                                                                                                             userDeletionCompletedIntegrationEventFailure.CorrelationId, userDeletionCompletedIntegrationEventFailure.UserId,
                                                                                                                                             userDeletionCompletedIntegrationEventFailure.Code, userDeletionCompletedIntegrationEventFailure.Reason))));
            _loggerMock.Verify(
                x => x.LogIntegrationEventError(
                    It.Is <ServiceComponentEnumeration>(s => Equals(s, ServiceComponentEnumeration.RivaIdentity)),
                    It.Is <IIntegrationEvent>(ie => ie == userDeletionCompletedIntegrationEventFailure),
                    It.Is <string>(m => m.Equals(exceptionLogMessage)),
                    It.IsAny <object[]>()));
        }
コード例 #4
0
        public async Task HandleAsync(AnnouncementPreferencesDeletionCompletedIntegrationEventFailure integrationEvent, CancellationToken cancellationToken = default)
        {
            var message = $"Could not finish {nameof(User)} deletion process.";

            _logger.LogIntegrationEventError(ServiceComponentEnumeration.RivaUsers, integrationEvent,
                                             "userId={userId}, message={message}, reason={reason}, code={code}",
                                             integrationEvent.UserId, message, integrationEvent.Reason, integrationEvent.Code);

            var userDeletionCompletedIntegrationEventFailure = new UserDeletionCompletedIntegrationEventFailure(
                integrationEvent.CorrelationId, integrationEvent.Code, integrationEvent.Reason, integrationEvent.UserId);
            var userDeletionCompletedIntegrationEventFailureTask = _integrationEventBus.PublishIntegrationEventAsync(userDeletionCompletedIntegrationEventFailure);

            try
            {
                var domainEvents = await _domainEventStore.FindAllAsync(integrationEvent.UserId);

                var userCreatedDomainEvent = (UserCreatedDomainEvent)domainEvents.First(x => x is UserCreatedDomainEvent);
                var user = User.Builder()
                           .SetId(integrationEvent.UserId)
                           .SetEmail(userCreatedDomainEvent.Email)
                           .SetServiceActive(userCreatedDomainEvent.ServiceActive)
                           .SetAnnouncementPreferenceLimit(userCreatedDomainEvent.AnnouncementPreferenceLimit)
                           .SetAnnouncementSendingFrequency(userCreatedDomainEvent.AnnouncementSendingFrequency)
                           .Build();

                await _userRepository.AddAsync(user);

                user.AddEvents(domainEvents);
                user.ApplyEvents();
                await _userRepository.UpdateAsync(user);
            }
            catch (Exception e)
            {
                _logger.LogIntegrationEventError(ServiceComponentEnumeration.RivaUsers, integrationEvent,
                                                 "userId={userId}, message={message}, stackTrace={stackTrace}", integrationEvent.UserId,
                                                 e.Message, e.StackTrace);
            }

            await userDeletionCompletedIntegrationEventFailureTask;
        }