public async Task <ActionResult> Put(int id, [FromBody] AlterarReservaViewModel reserva)
        {
            ReservaRepository _reserva = new ReservaRepository();
            var ReservaUsuario         = await _reserva.BuscarPorID(id);

            if (ReservaUsuario == null)
            {
                return(NotFound(new {
                    Mensagem = "Reserva não encontrada",
                    Erro = true
                }));
            }

            OfertaRepository _oferta = new OfertaRepository();
            var QtdOferta            = await _oferta.BuscarPorID(ReservaUsuario.OfertaId.Value);


            if (QtdOferta != null)
            {
                QtdOferta.Quantidade = QtdOferta.Quantidade + ReservaUsuario.Quantidade;
                var RetornorOferta = await _oferta.Alterar(QtdOferta);
            }


            if (QtdOferta.Quantidade < reserva.Quantidade)
            {
                return(NotFound(new {
                    Mensagem = "Atenção! Quantidade desejada maior que a ofertada",
                    Erro = true
                }));
            }

            var ReservaAlterada = VerificaAlteracaoReserva(ReservaUsuario, reserva);

            QtdOferta.Quantidade = QtdOferta.Quantidade - ReservaAlterada.Quantidade;

            try {
                await _repositorio.Alterar(ReservaAlterada);

                await _oferta.Alterar(QtdOferta);

                return(Ok(new {
                    Mensagem = "Reserva Alterada Com Sucesso",
                    Erro = false
                }));
            } catch (DbUpdateConcurrencyException) {
                //Verificamos se o objeto realmente existe no banco
                var reserva_valido = await _repositorio.BuscarPorID(id);

                if (reserva_valido == null)
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }
        }
        public async Task <ActionResult> Put(int id, Reserva reserva)
        {
            if (id != reserva.IdReserva)
            {
                return(BadRequest(new { mensagem = "Reserva não encontrada", Erro = true }));
            }
            try {
                await _repositorio.Alterar(reserva);
            } catch (DbUpdateConcurrencyException) {
                var reserva_valido = await _repositorio.BuscarPorID(id);

                if (reserva_valido == null)
                {
                    return(NotFound(new { mensagem = "Reserva não valido", Erro = true }));
                }
                else
                {
                    throw;
                }
            }
            return(Ok("Alteração da reserva feita com sucesso"));
        }
        public async Task <ActionResult <Reserva> > Put(int id, Reserva reserva)
        {
            if (id != reserva.IdReserva)
            {
                return(BadRequest());
            }

            try {
                await _repositorio.Alterar(reserva);
            } catch (DbUpdateConcurrencyException) {
                var reserva_valida = await _repositorio.BuscarPorID(id);

                if (reserva_valida == null)
                {
                    return(NotFound());
                }
                else
                {
                    throw;
                }
            }

            return(reserva);
        }