Esempio n. 1
0
        //Cadastrar a reserva não quer dizer que ela foi comprada
        // Tera um handler para confirmar reserva
        // Ai sim é persistido, mas para outras pessoas, a reserva ja foi feita
        public ICommandResult Handle(CreateReservaCommand command)
        {
            command.Validate();

            if (command.Invalid)
            {
                return(new GenericCommandResult(false, "Dados incorretos", command.Notifications));
            }

            var cliente   = _clienteRepository.GetById(command.ClienteId);
            var sessao    = _sessaoRepository.GetById(command.SessaoId);
            var poltronas = _sessaoRepository.GetPoltronasByIds(sessao.Id, ExtractGuids.Extract(command));

            //Verificar se poltronas estão ocupadas
            if (IsPoltronasOcuped(poltronas))
            {
                return(new GenericCommandResult(false, "Algumas poltronas selecionadas já estão ocupadas", poltronas));
            }

            var reserva   = new Reserva(cliente, sessao);
            var ingressos = CreateIngressos(command.Ingressos, poltronas);

            reserva.AdicionarIngresso(ingressos);

            AddNotifications(reserva);

            if (Invalid)
            {
                return(new GenericCommandResult(false, "Problema ao gerar reserva", this.Notifications));
            }

            _reservaRepository.Add(reserva);

            return(new GenericCommandResult(true, "Reserva cadastrado, aguardando pagamento", reserva));
            //Verifica o estado das poltronas
            //Utilizar Dapper ou buscar estas informações na tela
        }