//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 }