public async Task <ActionResult <ReservationViewModel> > CreateReservation([FromBody] CreateReservationViewModel model)
        {
            if (!ModelState.IsValid)
            {
                NotifyModelStateErrors();
                return(ModelStateErrorResponseError());
            }


            var createReservationCommand = _mapper.Map <CreateReservationCommand>(model);

            var result = await Mediator.SendCommandAsync(createReservationCommand);

            if (result.Success)
            {
                await Mediator.NotifyDomainNotification(
                    DomainNotification.Success($" The reservation to {model.ContactName} was created with success !"));
            }

            var reservation = await _reservationRepository.GetByIdAsync(createReservationCommand.ReservationId);

            var returnModel = _mapper.Map <ReservationViewModel>(reservation);

            return(ResponsePost(
                       nameof(CreateReservation),
                       returnModel));
        }
        public async Task <ActionResult <ContactViewModel> > DeleteContact(Guid contactId)
        {
            var contact = await _contactRepository.GetContactById(contactId);

            if (contact == null)
            {
                NotifyError("This contact Id is invalid !");
                return(ModelStateErrorResponseError());
            }

            var deleteContactCommand = _mapper.Map <DeleteContactCommand>(contactId);

            var result = await Mediator.SendCommandAsync(deleteContactCommand);

            if (result.Success)
            {
                await Mediator.NotifyDomainNotification(
                    DomainNotification.Success($" The contact to {contact.ContactName} was excluded with success !"));
            }


            var returnModel = _mapper.Map <ContactViewModel>(contact);

            return(ResponsePost(
                       nameof(DeleteContact),
                       returnModel));
        }
        public async Task <ActionResult <ContactViewModel> > EditContact([FromBody] EditContactViewModel model)
        {
            if (!ModelState.IsValid)
            {
                NotifyModelStateErrors();
                return(ModelStateErrorResponseError());
            }

            var editContactCommand = _mapper.Map <EditContactCommand>(model);

            var result = await Mediator.SendCommandAsync(editContactCommand);

            if (result.Success)
            {
                await Mediator.NotifyDomainNotification(
                    DomainNotification.Success($" The contact to {model.ContactName} was edited with success !"));
            }

            var contact = await _contactRepository.GetContactById(model.ContactId);

            var returnModel = _mapper.Map <ContactViewModel>(contact);

            return(ResponsePost(
                       nameof(EditContact),
                       returnModel));
        }
        public async void AddDomainNotificationSuccess_Ok()
        {
            var faker = new Faker();

            var message = faker.Lorem.Sentence();

            var handler = new DomainNotificationHandler();

            var domainNotification = DomainNotification.Success(message);

            await handler.Handle(domainNotification, new CancellationToken());

            var notifications = handler.GetNotificationsSuccess();

            Assert.True(handler.HasNotificationsSucess());

            Assert.True(notifications.Count == 1);
        }
        public async void GetNotificationsSucess_Ok()
        {
            var faker = new Faker();

            var message = faker.Lorem.Sentence();

            var handler = new DomainNotificationHandler();

            var domainNotification = DomainNotification.Success(message);

            await handler.Handle(domainNotification, new CancellationToken());

            var notifications = handler.GetNotificationsSuccess();

            var result = notifications.Select(x => x.Value);


            Assert.Contains(message, result);
        }
        public async void DomainNotificationClear_Ok()
        {
            var faker = new Faker();


            var handler = new DomainNotificationHandler();


            var qtError   = faker.Random.Int(min: 3, max: 10);
            var qtSuccess = faker.Random.Int(min: 3, max: 10);


            for (var i = 0; i < qtError; i++)
            {
                var message = faker.Lorem.Sentence();

                var domainNotification = DomainNotification.Fail(message);
                await handler.Handle(domainNotification, new CancellationToken());
            }

            for (var i = 0; i < qtSuccess; i++)
            {
                var message = faker.Lorem.Sentence();

                var domainNotification = DomainNotification.Success(message);
                await handler.Handle(domainNotification, new CancellationToken());
            }

            handler.Clear();

            var notificationsError   = handler.GetNotificationsError();
            var notificationsSuccess = handler.GetNotificationsSuccess();

            Assert.False(handler.HasNotificationsError());
            Assert.False(handler.HasNotificationsSucess());


            Assert.True(notificationsError.Count == 0);
            Assert.True(notificationsSuccess.Count == 0);
        }