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()); }
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); }