예제 #1
0
        public async Task <IActionResult> PostAsync([FromBody] DataVooDto voo)
        {
            // Valida se as informações foram fornecidas de acordo com o modelo (DataVooDto)
            if (!ModelState.IsValid)
            {
                return(BadRequest(ModelState));
            }

            // Valida se a data está no período
            var data = DateTime.Parse(voo.Data.ToString());

            if (!(await _vooService.ValidaPeriodo(data)))
            {
                return(BadRequest(String.Format("Data fora do período especificado. " +
                                                "Valor fornecido: {0:d}", data)));
            }
            ;

            // Executa a verificação
            var voos = await _vooService.ListarVoosAsync(voo);

            // Valida se foram encontrados voos que atendem à solicitação
            if (voos.Count == 0)
            {
                return(NotFound("Nenhum voo encontrado!"));
            }

            return(Ok(voos));
        }
예제 #2
0
        public async Task <List <VooResponseDto> > ListarVoosAsync(DataVooDto voo)
        {
            // Lista todos os voos conforme a Data e a Origem
            var voosSaida = await _context.Voos
                            .Where(v => v.Data == voo.Data && v.Origem == voo.Origem)
                            .OrderBy(v => v.HoraSaida)
                            .ToListAsync();

            // Lista todos os voos conforme a Data e o Destino
            var voosChegada = await _context.Voos
                              .Where(v => (v.Data == voo.Data ||
                                           v.Data == DateTime.Parse(voo.Data.ToString()).AddDays(1)) &&
                                     v.Destino == voo.Destino)
                              .OrderBy(v => v.HoraSaida)
                              .ToListAsync();

            // if (!voosSaida.Any() && !voosChegada.Any()) { return NotFound("Nenhum voo encontrado!"); }

            // Lógica para montagem da resposta
            var res = new List <VooResponseDto>();

            for (var i = 0; i < voosSaida.Count; i++)
            {
                var origem    = voo.Origem;
                var destino   = voo.Destino;
                var horaSaida = voosSaida[i].HoraSaida;

                // Caso o destino seja o desejado, adiciona à lista
                if (voosSaida[i].Destino == voo.Destino)
                {
                    var horaChegada = voosSaida[i].HoraChegada;

                    var trecho = new VooTrechosDto
                    {
                        Origem      = origem,
                        Destino     = destino,
                        HoraSaida   = horaSaida,
                        HoraChegada = horaChegada,
                        Operadora   = voosSaida[i].Operadora,
                        Preco       = voosSaida[i].Preco
                    };

                    var listTrechos = new List <VooTrechosDto>();
                    listTrechos.Add(trecho);

                    var resultado = new VooResponseDto
                    {
                        Origem      = origem,
                        Destino     = destino,
                        HoraSaida   = horaSaida,
                        HoraChegada = horaChegada,
                        Trechos     = listTrechos
                    };

                    // adicionando o resultado à lista
                    res.Add(resultado);
                }
                // Caso não seja, verifica as possíveis conexões
                // Máximo de conexões: 1.
                else if (voosChegada.Any())
                {
                    for (var j = 0; j < voosChegada.Count; j++)
                    {
                        if (voosSaida[i].HoraChegada <voosChegada[j].HoraSaida &&
                                                      voosSaida[i].HoraChegada.AddHours(12)> voosChegada[j].HoraSaida &&
                            voosSaida[i].Destino == voosChegada[j].Origem)
                        {
                            var horaChegada = voosChegada[j].HoraChegada;

                            // Monta o primeiro trecho
                            var trecho1 = new VooTrechosDto
                            {
                                Origem      = voosSaida[i].Origem,
                                Destino     = voosSaida[i].Destino,
                                HoraSaida   = voosSaida[i].HoraSaida,
                                HoraChegada = voosSaida[i].HoraChegada,
                                Operadora   = voosSaida[i].Operadora,
                                Preco       = voosSaida[i].Preco
                            };
                            // Criando o segundo trecho
                            var trecho2 = new VooTrechosDto
                            {
                                Origem      = voosChegada[j].Origem,
                                Destino     = voosChegada[j].Destino,
                                HoraSaida   = voosChegada[j].HoraSaida,
                                HoraChegada = voosChegada[j].HoraChegada,
                                Operadora   = voosChegada[j].Operadora,
                                Preco       = voosChegada[j].Preco
                            };
                            // Criando a lista de trechos e adicionando-os
                            var listTrechos = new List <VooTrechosDto>();
                            listTrechos.Add(trecho1);
                            listTrechos.Add(trecho2);

                            // Montando a resposta final, no formato solicitado
                            var resultado = new VooResponseDto
                            {
                                Origem      = origem,
                                Destino     = destino,
                                HoraSaida   = horaSaida,
                                HoraChegada = horaChegada,
                                Trechos     = listTrechos
                            };

                            res.Add(resultado);
                        }
                    }
                }
            }

            return(res);
        }
예제 #3
0
 public async Task <List <VooResponseDto> > ListarVoosAsync(DataVooDto voo)
 {
     return(await _vooRepository.ListarVoosAsync(voo));
 }