public async Task <Response <Exception, Rental> > Handle(RentalCreateCommand request, CancellationToken cancellationToken)
        {
            // Retorna a lista virtual dos filmes
            var moviesCallback = _movieRepository.GetAll();

            // Verifica algum erro
            if (moviesCallback.HasError)
            {
                return(moviesCallback.Error);
            }

            // Filtra a lista dos filmes
            var movies = moviesCallback.Success
                         .Where((x => request.MovieIds.Contains(x.Id))).ToList();

            // Retorna erro caso não existam filmes
            if (!movies.Any())
            {
                return(new NotFoundException("Filme"));
            }

            // Retorna erro caso algum filme não esteja ativo
            if (movies.Any(x => x.Active == false))
            {
                return(new InactiveEntityException("Filmes"));
            }

            // Retorna erro caso algum filme já esteja alugado
            if (movies.Any(x => x.IsRented()))
            {
                return(new MovieAlreadyRentedException());
            }

            // Faz o map do commando
            var rentalMap = Mapper.Map <RentalCreateCommand, Rental>(request);

            // Adiciona os filmes encontrados no aluguel
            rentalMap.AddMovies(movies);

            // Cria o aluguel
            var newRentalCallback = await _rentalRepository.CreateAsync(rentalMap);

            // Verifica algum erro
            if (newRentalCallback.HasError)
            {
                return(newRentalCallback.Error);
            }

            // Retorna o aluguel
            return(newRentalCallback.Success);
        }
 public async Task <IActionResult> Create([FromBody] RentalCreateCommand rentalCreateCommand)
 {
     return(HandleCommand(await _mediator.Send(rentalCreateCommand)));
 }