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