public async Task <string> RegistreerKlant(RegistreerKlantCommand command)
        {
            var klant = new Klant
            {
                Achternaam     = command.Achternaam,
                Voornaam       = command.Voornaam,
                AdresRegel     = command.AdresRegel,
                Id             = command.AccountId,
                Plaats         = command.Plaats,
                Postcode       = command.Postcode,
                Telefoonnummer = command.Telefoonnummer
            };

            await _datamapper.Insert(klant);

            _logger.LogInformation("Added klant with the id {0} and name {1} {2} ", klant.Id, klant.Voornaam,
                                   klant.Achternaam);

            _eventPublisher.Publish(new KlantGeregistreerdEvent
            {
                Achternaam     = klant.Achternaam,
                Voornaam       = klant.Voornaam,
                AdresRegel     = klant.AdresRegel,
                Id             = klant.Id,
                Plaats         = klant.Plaats,
                Postcode       = klant.Postcode,
                Telefoonnummer = klant.Telefoonnummer
            });

            return(klant.Id);
        }
        public async Task RegistreerKlantCommandInsertsKlantAndThrowsEvent()
        {
            var eventpublisherMock = new Mock <IEventPublisher>(MockBehavior.Strict);

            eventpublisherMock.Setup(m =>
                                     m.Publish(
                                         It.Is <KlantGeregistreerdEvent>(d => d.RoutingKey == NameConstants.KlantGeregistreerdEvent)));

            var datamapperMock = new Mock <IKlantDatamapper>(MockBehavior.Strict);

            datamapperMock
            .Setup(m => m.Insert(It.Is <Klant>(b => b.Voornaam == "Hans" && b.Id == "1")))
            .Returns(Task.CompletedTask).Verifiable();

            var command = new RegistreerKlantCommand
            {
                AccountId      = "1",
                Voornaam       = "Hans",
                Achternaam     = "van Huizen",
                AdresRegel     = "Voorstraat 8",
                Plaats         = "Groningen",
                Postcode       = "1345df",
                Telefoonnummer = "0665234365"
            };

            var listener = new KlantListener(datamapperMock.Object, eventpublisherMock.Object);

            var result = await listener.RegistreerKlant(command);

            Assert.AreEqual("1", result);
        }
Beispiel #3
0
        public async Task RegistreerKlantCommandAddsKlantToDatabaseAndThrowsEvent()
        {
            _context.DeclareQueue("klantGeregistreedQueue", new List <string> {
                NameConstants.KlantGeregistreerdEvent
            });
            var command = new RegistreerKlantCommand
            {
                AccountId      = "1",
                Voornaam       = "Hans",
                Achternaam     = "van Huizen",
                AdresRegel     = "Voorstraat 8",
                Plaats         = "Groningen",
                Postcode       = "1345df",
                Telefoonnummer = "0665234365"
            };

            var publisher = new CommandPublisher(_context);
            var result    = await publisher.Publish <int>(command, NameConstants.RegistreerKlantCommandQueue);

            Thread.Sleep(1000);

            Assert.AreEqual(1, result);
            Assert.AreEqual(1, _context.TestQueues["klantGeregistreedQueue"].Queue.Count);
        }
        public async Task <IActionResult> RegistreerKlant(Klant klant)
        {
            var registreerKlantCommand = new RegistreerKlantCommand
            {
                Voornaam       = klant.Voornaam,
                Achternaam     = klant.Achternaam,
                AdresRegel     = klant.AdresRegel,
                Plaats         = klant.Plaats,
                Postcode       = klant.Postcode,
                Telefoonnummer = klant.Telefoonnummer
            };

            var registreerGebruikerCommand = new RegistreerGebruikerCommand
            {
                NewUser = new Account
                {
                    UserName = klant.Email,
                    Password = klant.Wachtwoord,
                    Role     = Roles.Klant
                }
            };

            try
            {
                var registreerGebruikerResult = await _commandPublisher.Publish <string>(registreerGebruikerCommand,
                                                                                         NameConstants.RegistreerGebruikerCommandQueue);

                registreerKlantCommand.AccountId = registreerGebruikerResult;
            }
            catch (NoResponseException)
            {
                _logger.LogDebug("Authenticatie service unavaible");
                return(StatusCode(503, "Service niet bereikbaar."));
            }
            catch (AccountCreationException)
            {
                return(StatusCode(409, "Account aanmaken is verkeerd gegaan."));
            }
            catch (PasswordException)
            {
                return(StatusCode(412, "Wachtwoord niet sterk genoeg."));
            }
            catch (UsernameAlreadyExistsException)
            {
                return(StatusCode(409, "Email bestaat al."));
            }

            try
            {
                var registreerKlantResult = await _commandPublisher.Publish <string>(registreerKlantCommand,
                                                                                     NameConstants.RegistreerKlantCommandQueue);
            }
            catch (NoResponseException)
            {
                await RollbackGeregristreerdAccount(registreerKlantCommand.AccountId);

                _logger.LogDebug("Klantbeheer service unavaible");
                return(StatusCode(503));
            }
            catch (Exception)
            {
                await RollbackGeregristreerdAccount(registreerKlantCommand.AccountId);

                _logger.LogDebug("Account aanmaken mislukt rollback wordt gedaan. Met Accountid : {}",
                                 registreerKlantCommand.AccountId);
                return(StatusCode(500, "Account aanmaken mislukt."));
            }

            return(Ok());
        }