public ActionResult Put([FromBody] ManterGrupoRequest request)
 {
     try
     {
         _grupoService.Atualizar(request);
         return(NoContent());
     }
     catch (Exception e)
     {
         return(BadRequest(e.Message));
     }
 }
 public ActionResult Post([FromBody] ManterGrupoRequest request)
 {
     try
     {
         int idGrupo = _grupoService.Adicionar(request);
         return(Ok(idGrupo));
     }
     catch (Exception e)
     {
         return(BadRequest(e.Message));
     }
 }
Beispiel #3
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);
        }
Beispiel #4
0
        public void Atualizar(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.");
            }

            Grupo grupo = ObterPorId(request.IdGrupo.Value);

            if (grupo == null)
            {
                throw new Exception("Grupo não encontrado.");
            }

            CaseDeNegocio caseDeNegocio = grupo.CaseDeNegocio;

            if (caseDeNegocio.PermiteMontarGrupos &&
                (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));
            }

            int totalAlunosInscritos = (from a in _alunoRepository.Queryable()
                                        where a.IdCaseDeNegocio == caseDeNegocio.Id &&
                                        request.IdsAlunosMembros.Contains(a.Id)
                                        select a).Count();

            if (totalAlunosInscritos != request.IdsAlunosMembros.Count)
            {
                throw new Exception("Foi solicitado inclusão de aluno inexistente.");
            }

            bool possuiAlunoQueJaEstaEmOutroGrupo = (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 &&
                                                     m.IdGrupo != grupo.Id
                                                     select m).Any();

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

            if (GrupoJaTeveLicaoEntregue(grupo.Id))
            {
                throw new Exception("Não é permitido alterações em grupos que já tiveram lições entregues.");
            }

            grupo.Nome          = request.Nome;
            grupo.GritoDeGuerra = request.GritoDeGuerra;

            AtualizarListaDeMembros(grupo, request.IdsAlunosMembros);

            Atualizar(grupo);
        }