Пример #1
0
        public IQueryResult Handle(ListarDetalhesDaInstituicaoQuery query)
        {
            var turmasDaInstituicao = Repositorio.Buscar(query.IdInstituicao).Turmas;

            if (turmasDaInstituicao.Count < 1)
            {
                return(new GenericQueryResult(false, "Esta instituição ainda está vazia!", null));
            }

            var    turmas       = new List <Turma>();
            var    imagens      = new List <string>();
            string alunoUrlFoto = null;

            if (query.Nome != null)
            {
                turmasDaInstituicao.ForEach(
                    t => {
                    if (t.Alunos != null)
                    {
                        var alunosFiltrados = t.Alunos.FindAll(a => a.Nome.ToLower().Contains(query.Nome));
                        t.Alunos.Clear();
                        t.Alunos.AddRange(alunosFiltrados);
                        if (t.Alunos.Count > 0)
                        {
                            turmas.Add(t);
                        }
                    }
                });

                if (turmas.Count > 0)
                {
                    var result = new
                    {
                        Tipo   = turmasDaInstituicao[0].Instituicao.UsuariosInstituicoes.Find(ui => ui.IdUsuario == query.IdUsuario).Tipo,
                        Turmas =
                            turmas.Select(t =>
                        {
                            return(new {
                                IdTurma = t.Id,
                                NomeTurma = t.Nome,
                                Alunos = t.Alunos.Select(a =>
                                {
                                    return new
                                    {
                                        IdAluno = a.Id,
                                        NomeAluno = a.Nome,
                                        Email = a.Email,
                                        DataNascimento = a.DataNascimento,
                                        UrlFoto = a.UrlFoto,
                                        CPF = a.CPF
                                    };
                                }).OrderBy(a => a.NomeAluno)
                            });
                        }).OrderBy(t => t.NomeTurma)
                    };

                    return(new GenericQueryResult(true, "Alunos da instituição filtrados!", result));
                }

                return(new GenericQueryResult(false, "Nenhum aluno encontrado!", null));
            }

            if (query.UrlImagem != null)
            {
                turmas = turmasDaInstituicao;
                turmas.ForEach(t =>
                {
                    if (t.Alunos != null)
                    {
                        t.Alunos.ForEach(a =>
                        {
                            imagens.Add(a.UrlFoto);
                        });
                    }
                });

                alunoUrlFoto = Azure.FindSimilar(query.UrlImagem, RecognitionModel.Recognition01, imagens).Result;

                if (alunoUrlFoto != null)
                {
                    turmas[0]           = turmas.Find(t => t.Alunos.Find(a => a.UrlFoto == alunoUrlFoto) != null);
                    turmas[0].Alunos[0] = turmas[0].Alunos.Find(a => a.UrlFoto == alunoUrlFoto);

                    var result = new {
                        Tipo   = turmasDaInstituicao[0].Instituicao.UsuariosInstituicoes.Find(ui => ui.IdUsuario == query.IdUsuario).Tipo,
                        Turmas = new[] {
                            new {
                                IdTurma   = turmas[0].Id,
                                NomeTurma = turmas[0].Nome,
                                Alunos    = new [] {
                                    new
                                    {
                                        IdAluno        = turmas[0].Alunos[0].Id,
                                        NomeAluno      = turmas[0].Alunos[0].Nome,
                                        Email          = turmas[0].Alunos[0].Email,
                                        DataNascimento = turmas[0].Alunos[0].DataNascimento,
                                        UrlFoto        = turmas[0].Alunos[0].UrlFoto,
                                        CPF            = turmas[0].Alunos[0].CPF
                                    }
                                }
                            }
                        }
                    };

                    return(new GenericQueryResult(true, "Aluno encontrado!", result));
                }

                return(new GenericQueryResult(false, "Não existe ou não foi possível encontrar nenhum aluno parecido com a pessoa da foto!", null));
            }

            var resultado = new
            {
                Tipo   = turmasDaInstituicao[0].Instituicao.UsuariosInstituicoes.Find(ui => ui.IdUsuario == query.IdUsuario).Tipo,
                Turmas =
                    turmasDaInstituicao.Select(t =>
                {
                    return(new
                    {
                        IdTurma = t.Id,
                        NomeTurma = t.Nome,
                        Alunos = t.Alunos.Select(a =>
                        {
                            return new
                            {
                                IdAluno = a.Id,
                                NomeAluno = a.Nome,
                                Email = a.Email,
                                DataNascimento = a.DataNascimento,
                                UrlFoto = a.UrlFoto,
                                CPF = a.CPF
                            };
                        }).OrderBy(a => a.NomeAluno)
                    });
                }).OrderBy(t => t.NomeTurma)
            };

            return(new GenericQueryResult(true, "Turmas da instituição e alunos delas!", resultado));
        }