public async Task OnNextAsync(UserRegisteredEvent item, StreamSequenceToken token = null) { var @event = new UserVerificationEvent() { Email = item.Email, Status = UserVerificationStatusEnum.Verified }; if (_verificationState.State.IsAlreadyVerified) { @event.Status = UserVerificationStatusEnum.Duplicate; } if (_blacklistedEmails.Get().Contains(item.Email)) { @event.Status = UserVerificationStatusEnum.Blocked; _logger.LogWarning("Blacklisted user {email}", item.Email); } await _userVerificationStream.OnNextAsync(@event); _verificationState.State.IsAlreadyVerified = true; await _verificationState.WriteStateAsync(); }
public void Apply(UserVerificationEvent @event) { if (@event.Status == UserVerificationStatusEnum.Verified) { IsActive = true; } }
public Task OnNextAsync(UserVerificationEvent item, StreamSequenceToken token = null) { _userVerificationEvent = item; _semaphore.Release(); return(Task.CompletedTask); }
public async Task UserVerification_DuplicateEmail_NotProcessed() { var testGuid = Guid.NewGuid(); const int semaphoreTimeout = 1000; var testEmail = _faker.Internet.Email(); var userRegisteredEvent = new UserRegisteredEvent() { Email = testEmail, Name = _faker.Random.String2(5), Surname = _faker.Random.String2(5) }; var streamProvider = _cluster.Cluster.Client.GetStreamProvider(Constants.StreamProviderName); var userRegistrationStream = streamProvider.GetStream <UserRegisteredEvent>(testGuid, nameof(UserRegisteredEvent)); var userVerifiedStream = streamProvider.GetStream <UserVerificationEvent>(testGuid, nameof(UserVerificationEvent)); await userVerifiedStream.SubscribeAsync(this); await userRegistrationStream.OnNextAsync(userRegisteredEvent); await _semaphore.WaitAsync(semaphoreTimeout); Assert.Equal(testEmail, _userVerificationEvent.Email); Assert.Equal(UserVerificationStatusEnum.Verified, _userVerificationEvent.Status); _userVerificationEvent = null; await userRegistrationStream.OnNextAsync(userRegisteredEvent); await _semaphore.WaitAsync(semaphoreTimeout); Assert.NotNull(_userVerificationEvent); Assert.Equal(testEmail, _userVerificationEvent.Email); Assert.Equal(UserVerificationStatusEnum.Duplicate, _userVerificationEvent.Status); }
public Task OnNextAsync(UserVerificationEvent item, StreamSequenceToken token = null) { RaiseEvent(item); _logger.LogInformation("{name} <{email}> is now active", TentativeState.Name, TentativeState.Email); return(Task.CompletedTask); }
public async Task OnNextAsync(UserVerificationEvent item, StreamSequenceToken token = null) { _registrationStatusState.State.Status = item.Status switch { UserVerificationStatusEnum.Verified => UserRegistrationStatusEnum.Verified, UserVerificationStatusEnum.Blocked => UserRegistrationStatusEnum.Blocked, _ => _registrationStatusState.State.Status }; _registrationStatusState.State.UpdatedOn = DateTime.UtcNow; await _registrationStatusState.WriteStateAsync(); }
public UserVerificationTests(ClusterFixture fixture) { _cluster = fixture; _userVerificationEvent = null; _semaphore = new SemaphoreSlim(0, 1); }