public IList <AlunoDoCase> ListarAlunosQueSejamMembrosNoGrupo(int idGrupo)
 {
     return((from a in _alunoDoCaseRepository.Queryable()
             join m in _membroDoGrupoRepository.Queryable() on a.Id equals m.IdAluno
             where m.IdGrupo == idGrupo
             select a).ToList());
 }
Exemplo n.º 2
0
        public int Adicionar(ManterGrupoRequest request)
        {
            if (request == null || request.IdGrupo.HasValue)
            {
                throw new Exception("Solicitação inválida.");
            }

            if (request.IdsAlunosMembros == null || request.IdsAlunosMembros.Count < 2)
            {
                throw new Exception("Um grupo deve ser formado por 2 ou mais alunos.");
            }

            CaseDeNegocio caseDeNegocio = _caseDeNegocioRepository.GetById(request.IdCase);

            if (caseDeNegocio == null)
            {
                throw new Exception("Case de negócio não encontrado.");
            }

            if (!caseDeNegocio.PermiteMontarGrupos)
            {
                throw new Exception("Case de negócio não permite criação de grupos.");
            }

            if (request.IdsAlunosMembros.Count < caseDeNegocio.MinimoDeAlunosPorGrupo ||
                request.IdsAlunosMembros.Count > caseDeNegocio.MaximoDeAlunosPorGrupo)
            {
                throw new Exception(string.Format("Este case de negócio requer que o grupo seja formado com {0} a {1} alunos.", caseDeNegocio.MinimoDeAlunosPorGrupo, caseDeNegocio.MaximoDeAlunosPorGrupo));
            }

            var alunos = (from a in _alunoRepository.Queryable()
                          where a.IdCaseDeNegocio == caseDeNegocio.Id &&
                          request.IdsAlunosMembros.Contains(a.Id)
                          select a).ToList();

            if (!request.IdsAlunosMembros.All(id => alunos.Any(a => a.Id == id)))
            {
                throw new Exception("Foi solicitado inclusão de aluno inexistente.");
            }

            bool possuiAlunoQueJaEstaEmAlgumGrupo = (from m in _membroDoGrupoRepository.Queryable()
                                                     join a in _alunoRepository.Queryable() on m.IdAluno equals a.Id
                                                     where request.IdsAlunosMembros.Contains(m.IdAluno) && a.IdCaseDeNegocio == caseDeNegocio.Id
                                                     select m).Any();

            if (possuiAlunoQueJaEstaEmAlgumGrupo)
            {
                throw new Exception("Foi solicitado inclusão de aluno que já possui grupo.");
            }

            Grupo grupo = new Grupo(caseDeNegocio, request.Nome, request.GritoDeGuerra);

            foreach (var aluno in alunos)
            {
                grupo.Membros.Add(new MembroDoGrupo(grupo, aluno));
            }

            Adicionar(grupo);

            return(grupo.Id);
        }