From 38624e6014069e9cb661faded35c650d2fbd6d75 Mon Sep 17 00:00:00 2001 From: paulofelipefeitosa Date: Sun, 3 Mar 2019 11:37:41 -0300 Subject: [PATCH 1/2] Add Curso private controller and Curso refactor --- pom.xml | 6 ++ .../api/categoriaadmin/CategoriaAdmin.java | 15 +++-- .../CategoriaAdminController.java | 8 +-- .../br/com/openenade/api/curso/Curso.java | 9 +-- .../openenade/api/curso/CursoController.java | 56 ------------------- .../com/openenade/api/curso/CursoService.java | 23 +++++--- .../api/curso/PrivateCursoController.java | 34 +++++++++++ .../api/curso/PublicCursoController.java | 36 ++++++++++++ .../openenade/api/modalidade/Modalidade.java | 9 ++- .../api/modalidade/ModalidadeController.java | 4 +- .../api/modalidade/ModalidadeService.java | 17 ++++++ .../api/universidade/UniversidadeService.java | 11 +--- .../br/com/openenade/api/BaseUnitTest.java | 2 +- .../api/curso/CursoServiceTests.java | 22 ++++---- .../api/nota/NotaControllerTests.java | 4 +- .../UniversidadeControllerTests.java | 4 +- .../UniversidadeServiceTests.java | 4 +- 17 files changed, 150 insertions(+), 114 deletions(-) delete mode 100644 src/main/java/br/com/openenade/api/curso/CursoController.java create mode 100644 src/main/java/br/com/openenade/api/curso/PrivateCursoController.java create mode 100644 src/main/java/br/com/openenade/api/curso/PublicCursoController.java create mode 100644 src/main/java/br/com/openenade/api/modalidade/ModalidadeService.java diff --git a/pom.xml b/pom.xml index 3baf711..869c624 100644 --- a/pom.xml +++ b/pom.xml @@ -61,6 +61,12 @@ runtime + + com.google.code.gson + gson + + + diff --git a/src/main/java/br/com/openenade/api/categoriaadmin/CategoriaAdmin.java b/src/main/java/br/com/openenade/api/categoriaadmin/CategoriaAdmin.java index e29bdd0..34e52a3 100644 --- a/src/main/java/br/com/openenade/api/categoriaadmin/CategoriaAdmin.java +++ b/src/main/java/br/com/openenade/api/categoriaadmin/CategoriaAdmin.java @@ -1,22 +1,21 @@ package br.com.openenade.api.categoriaadmin; - import com.fasterxml.jackson.annotation.JsonValue; public enum CategoriaAdmin { - - PUBLICO("Publico"),PRIVADO("Privado"); - + + PUBLICO("Publico"), PRIVADO("Privado"); + private String value; - + private CategoriaAdmin() { - + } - + private CategoriaAdmin(String value) { this.value = value; } - + @JsonValue public String getValue() { return this.value; diff --git a/src/main/java/br/com/openenade/api/categoriaadmin/CategoriaAdminController.java b/src/main/java/br/com/openenade/api/categoriaadmin/CategoriaAdminController.java index af1df44..59683c4 100644 --- a/src/main/java/br/com/openenade/api/categoriaadmin/CategoriaAdminController.java +++ b/src/main/java/br/com/openenade/api/categoriaadmin/CategoriaAdminController.java @@ -12,13 +12,13 @@ @CrossOrigin(origins = "*") @RequestMapping(path = CategoriaAdminController.ENDPOINT) public class CategoriaAdminController { - + public static final String ENDPOINT = "/categorias-admin"; - + @RequestMapping(method = RequestMethod.GET) public @ResponseBody ResponseEntity index() { - + return new ResponseEntity<>(CategoriaAdmin.values(), HttpStatus.OK); } - + } diff --git a/src/main/java/br/com/openenade/api/curso/Curso.java b/src/main/java/br/com/openenade/api/curso/Curso.java index 6ce93d1..3295432 100644 --- a/src/main/java/br/com/openenade/api/curso/Curso.java +++ b/src/main/java/br/com/openenade/api/curso/Curso.java @@ -4,27 +4,24 @@ import javax.persistence.Entity; import javax.persistence.EnumType; import javax.persistence.Enumerated; -import javax.validation.constraints.NotNull; import javax.validation.constraints.Positive; import javax.validation.constraints.NotBlank; import br.com.openenade.api.modalidade.Modalidade; import javax.persistence.IdClass; - @Entity @IdClass(CursoId.class) public class Curso { - @NotBlank(message = "'nome' não pode ser vazio.") + @NotBlank(message = "Curso 'nome' nao pode ser vazio") private String nome; @Id - @Positive(message = "'codigoArea' precisa ser positivo.") + @Positive(message = "Curso 'codigoArea' precisa ser positivo") private Long codigoArea; @Id - @Enumerated(EnumType.STRING) - @NotNull(message = "Você precisa especificar uma 'modalidade' de ensino.") + @Enumerated(EnumType.ORDINAL) private Modalidade modalidade; public Curso() { diff --git a/src/main/java/br/com/openenade/api/curso/CursoController.java b/src/main/java/br/com/openenade/api/curso/CursoController.java deleted file mode 100644 index 66e8367..0000000 --- a/src/main/java/br/com/openenade/api/curso/CursoController.java +++ /dev/null @@ -1,56 +0,0 @@ -package br.com.openenade.api.curso; - -import java.util.List; -import java.util.Optional; -import javax.validation.Valid; -import org.springframework.http.HttpStatus; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.CrossOrigin; -import org.springframework.web.bind.annotation.PathVariable; -import org.springframework.web.bind.annotation.PostMapping; -import org.springframework.web.bind.annotation.RequestBody; -import org.springframework.web.bind.annotation.ResponseBody; -import org.springframework.beans.factory.annotation.Autowired; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; -import br.com.openenade.api.modalidade.Modalidade; - - -@RestController -@CrossOrigin("*") -@RequestMapping(path = CursoController.ENDPOINT) -public class CursoController { - - public static final String ENDPOINT = "cursos"; - - @Autowired - private CursoService service; - - @PostMapping - public Curso postCurso(@Valid @RequestBody Curso newCurso) { - return this.service.save(newCurso); - } - - @GetMapping - @ResponseBody - public ResponseEntity> getAll() { - return new ResponseEntity<>(this.service.getAll(), HttpStatus.OK); - } - - @ResponseBody - @GetMapping(path = "/{codigo}/{modalidade}") - public ResponseEntity getCursoByCodigo(@PathVariable(name = "codigo") Long codigo, - @PathVariable(name = "modalidade") Modalidade modalidade) { - Optional optCurso = this.service.getByCodigo(codigo, modalidade); - - if (optCurso.isPresent()) { - return new ResponseEntity<>(optCurso.get(), HttpStatus.OK); - } else { - return new ResponseEntity<>(HttpStatus.NOT_FOUND); - } - } - - - -} diff --git a/src/main/java/br/com/openenade/api/curso/CursoService.java b/src/main/java/br/com/openenade/api/curso/CursoService.java index 49653d8..a7fb2fb 100644 --- a/src/main/java/br/com/openenade/api/curso/CursoService.java +++ b/src/main/java/br/com/openenade/api/curso/CursoService.java @@ -4,16 +4,16 @@ import java.util.Optional; import org.springframework.stereotype.Service; import org.springframework.beans.factory.annotation.Autowired; +import br.com.openenade.api.exceptions.ResourceNotFound; import br.com.openenade.api.modalidade.Modalidade; - @Service public class CursoService { @Autowired private CursoRepository repository; - public Curso save(Curso curso) { + public Curso addCurso(Curso curso) { return this.repository.save(curso); } @@ -21,15 +21,20 @@ public List getAll() { return this.repository.findAll(); } - public Optional getByCodigo(Long codigo, Modalidade modalidade) { + public Curso getByCodigo(Long codigo, Modalidade modalidade) { CursoId cursoId = new CursoId(codigo, modalidade); - return this.repository.findById(cursoId); - + Optional optCurso = this.repository.findById(cursoId); + if (optCurso.isPresent()) { + return optCurso.get(); + } else { + throw new ResourceNotFound("Cannot find Curso with Codigo [" + Long.toString(codigo) + + "] and Modalidade [" + modalidade.getValue() + "]"); + } } - - // unutilized - public void deleteCursoById(CursoId id) { - this.repository.deleteById(id); + + public void deleteById(CursoId cursoId) { + this.getByCodigo(cursoId.getCodigoArea(), cursoId.getModalidade()); + this.repository.deleteById(cursoId); } } diff --git a/src/main/java/br/com/openenade/api/curso/PrivateCursoController.java b/src/main/java/br/com/openenade/api/curso/PrivateCursoController.java new file mode 100644 index 0000000..189f21a --- /dev/null +++ b/src/main/java/br/com/openenade/api/curso/PrivateCursoController.java @@ -0,0 +1,34 @@ +package br.com.openenade.api.curso; + +import javax.validation.Valid; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.DeleteMapping; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.web.bind.annotation.RestController; +import br.com.openenade.api.modalidade.ModalidadeService; + +@RestController +@RequestMapping(path = PublicCursoController.ENDPOINT) +public class PrivateCursoController { + + @Autowired + private CursoService service; + + @ResponseBody + @PostMapping + public Curso addCurso(@Valid @RequestBody Curso newCurso) { + return this.service.addCurso(newCurso); + } + + @DeleteMapping(path = "/{codigo}/{modalidade}") + public void deleteCursoByCodigo(@PathVariable(name = "codigo") Long codigo, + @PathVariable(name = "modalidade") Integer modalidadeId) { + this.service + .deleteById(new CursoId(codigo, ModalidadeService.getModalidadeById(modalidadeId))); + } + +} diff --git a/src/main/java/br/com/openenade/api/curso/PublicCursoController.java b/src/main/java/br/com/openenade/api/curso/PublicCursoController.java new file mode 100644 index 0000000..a839a69 --- /dev/null +++ b/src/main/java/br/com/openenade/api/curso/PublicCursoController.java @@ -0,0 +1,36 @@ +package br.com.openenade.api.curso; + +import java.util.List; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.CrossOrigin; +import org.springframework.web.bind.annotation.PathVariable; +import org.springframework.web.bind.annotation.ResponseBody; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import br.com.openenade.api.modalidade.ModalidadeService; + +@RestController +@CrossOrigin("*") +@RequestMapping(path = PublicCursoController.ENDPOINT) +public class PublicCursoController { + + public static final String ENDPOINT = "cursos"; + + @Autowired + private CursoService service; + + @GetMapping + @ResponseBody + public List getAll() { + return this.service.getAll(); + } + + @ResponseBody + @GetMapping(path = "/{codigo}/{modalidade}") + public Curso getCursoByCodigo(@PathVariable(name = "codigo") Long codigo, + @PathVariable(name = "modalidade") Integer modalidadeId) { + return this.service.getByCodigo(codigo, ModalidadeService.getModalidadeById(modalidadeId)); + } + +} diff --git a/src/main/java/br/com/openenade/api/modalidade/Modalidade.java b/src/main/java/br/com/openenade/api/modalidade/Modalidade.java index 84d3065..d7da8a2 100644 --- a/src/main/java/br/com/openenade/api/modalidade/Modalidade.java +++ b/src/main/java/br/com/openenade/api/modalidade/Modalidade.java @@ -7,20 +7,23 @@ public enum Modalidade { @Enumerated(EnumType.ORDINAL) - EDUCACAO_PRESENCIAL("Educação Presencial"), EDUCACAO_A_DISTANCIA("Educação à Distância"); + EDUCACAO_PRESENCIAL("Educação Presencial", 0), EDUCACAO_A_DISTANCIA("Educação à Distância", 1); private String value; + private Integer id; private Modalidade() { } - private Modalidade(String value) { + private Modalidade(String value, Integer id) { this.value = value; + this.id = id; } @JsonValue public String getValue() { - return this.value; + return this.value + " - " + this.id; } + } diff --git a/src/main/java/br/com/openenade/api/modalidade/ModalidadeController.java b/src/main/java/br/com/openenade/api/modalidade/ModalidadeController.java index b448634..e53a4f0 100644 --- a/src/main/java/br/com/openenade/api/modalidade/ModalidadeController.java +++ b/src/main/java/br/com/openenade/api/modalidade/ModalidadeController.java @@ -16,8 +16,8 @@ public class ModalidadeController { public static final String ENDPOINT = "/modalidades"; @RequestMapping(method = RequestMethod.GET) - public @ResponseBody ResponseEntity index() { + public @ResponseBody ResponseEntity getAllModalidades() { return new ResponseEntity<>(Modalidade.values(), HttpStatus.OK); } - + } diff --git a/src/main/java/br/com/openenade/api/modalidade/ModalidadeService.java b/src/main/java/br/com/openenade/api/modalidade/ModalidadeService.java new file mode 100644 index 0000000..2341af6 --- /dev/null +++ b/src/main/java/br/com/openenade/api/modalidade/ModalidadeService.java @@ -0,0 +1,17 @@ +package br.com.openenade.api.modalidade; + +import br.com.openenade.api.exceptions.ResourceNotFound; + +public class ModalidadeService { + + public static Modalidade getModalidadeById(Integer id) { + Modalidade[] modalidades = Modalidade.values(); + if (id < 0 || id > modalidades.length) { + throw new ResourceNotFound( + "Cannot find Modalidade with Id [" + Integer.toString(id) + "]"); + } else { + return modalidades[id]; + } + } + +} diff --git a/src/main/java/br/com/openenade/api/universidade/UniversidadeService.java b/src/main/java/br/com/openenade/api/universidade/UniversidadeService.java index 13611e2..693a282 100644 --- a/src/main/java/br/com/openenade/api/universidade/UniversidadeService.java +++ b/src/main/java/br/com/openenade/api/universidade/UniversidadeService.java @@ -39,14 +39,9 @@ public Universidade save(Universidade universidade) { } public Universidade addCurso2Universidade(Universidade universidade, Curso curso) { - Optional optCurso = - this.cursoService.getByCodigo(curso.getCodigoArea(), curso.getModalidade()); - if (optCurso.isPresent()) { - universidade.addCurso(optCurso.get()); - return this.repository.saveAndFlush(universidade); - } else { - throw new ResourceNotFound(curso.toString()); - } + curso = this.cursoService.getByCodigo(curso.getCodigoArea(), curso.getModalidade()); + universidade.addCurso(curso); + return this.repository.saveAndFlush(universidade); } public Collection getAll() { diff --git a/src/test/java/br/com/openenade/api/BaseUnitTest.java b/src/test/java/br/com/openenade/api/BaseUnitTest.java index 7ccadd0..050da4c 100644 --- a/src/test/java/br/com/openenade/api/BaseUnitTest.java +++ b/src/test/java/br/com/openenade/api/BaseUnitTest.java @@ -61,7 +61,7 @@ public void clean() { for (Curso curso : this.cursoService.getAll()) { CursoId id = new CursoId(curso.getCodigoArea(), curso.getModalidade()); - this.cursoService.deleteCursoById(id); + this.cursoService.deleteById(id); } for (Ano ano : this.anoService.getAllAnos()) { this.anoService.deleteAno(ano.getAno()); diff --git a/src/test/java/br/com/openenade/api/curso/CursoServiceTests.java b/src/test/java/br/com/openenade/api/curso/CursoServiceTests.java index aeb712a..a8a7232 100644 --- a/src/test/java/br/com/openenade/api/curso/CursoServiceTests.java +++ b/src/test/java/br/com/openenade/api/curso/CursoServiceTests.java @@ -23,7 +23,7 @@ public class CursoServiceTests extends BaseUnitTest { @Test public void testSaveBasic() { - this.cursoService.save(new Curso("CC", 13, Modalidade.EDUCACAO_PRESENCIAL)); + this.cursoService.addCurso(new Curso("CC", 13, Modalidade.EDUCACAO_PRESENCIAL)); } @Test @@ -35,10 +35,10 @@ public void testGetAllBasic() { Curso e = new Curso("História", 13, Modalidade.EDUCACAO_A_DISTANCIA); - this.cursoService.save(a); - this.cursoService.save(b); - this.cursoService.save(c); - this.cursoService.save(d); + this.cursoService.addCurso(a); + this.cursoService.addCurso(b); + this.cursoService.addCurso(c); + this.cursoService.addCurso(d); List cursos = this.cursoService.getAll(); @@ -63,13 +63,13 @@ public void testGetByCodigo() { Curso b = new Curso(cursos[1], 5, modalidade); Curso c = new Curso(cursos[2], 7, modalidade); - this.cursoService.save(a); - this.cursoService.save(b); - this.cursoService.save(c); + this.cursoService.addCurso(a); + this.cursoService.addCurso(b); + this.cursoService.addCurso(c); - Curso aa = this.cursoService.getByCodigo(3L, modalidade).get(); - Curso bb = this.cursoService.getByCodigo(5L, modalidade).get(); - Curso cc = this.cursoService.getByCodigo(7L, modalidade).get(); + Curso aa = this.cursoService.getByCodigo(3L, modalidade); + Curso bb = this.cursoService.getByCodigo(5L, modalidade); + Curso cc = this.cursoService.getByCodigo(7L, modalidade); assertEquals(a, aa); assertEquals(b, bb); diff --git a/src/test/java/br/com/openenade/api/nota/NotaControllerTests.java b/src/test/java/br/com/openenade/api/nota/NotaControllerTests.java index 401dd3c..d4f6ef0 100644 --- a/src/test/java/br/com/openenade/api/nota/NotaControllerTests.java +++ b/src/test/java/br/com/openenade/api/nota/NotaControllerTests.java @@ -113,13 +113,13 @@ public void getTestBasicPlusDelete() throws Exception { JSONAssert.assertEquals( "{\"info\":{\"ano\":{\"ano\":2018},\"curso\":{\"nome\":" + "\"Ciência da Computação\",\"codigoArea\":33,\"" - + "modalidade\":\"Educação Presencial\"},\"universidade\":{\"c" + + "modalidade\":\"Educação Presencial - 0\"},\"universidade\":{\"c" + "odigoIES\":3213321,\"nome\":\"UFREI\",\"campus\":{\"codigo" + "\":123,\"estado\":{\"sigla\":\"GO\",\"regiao\":{\"sigla\":" + "\"NE\"}},\"nome\":\"Poeira Grande\"},\"categoriaAdmin\":\"P" + "ublico\",\"cursos\":[{\"nome\":\"Ciênc" + "ia da Computação\",\"codigoArea\":33,\"modalidade\":\"Educa" - + "ção Presencial\"}]}},\"avaliacao\":{\"concluintesInscritos" + + "ção Presencial - 0\"}]}},\"avaliacao\":{\"concluintesInscritos" + "\":3,\"concluintesParticipantes\":2,\"notaBrutaFG\":0.5,\"" + "notaPadronizadaFG\":0.0,\"notaBrutaCE\":2.1,\"notaPadroniz" + "adaCE\":0.0,\"enadeContinuo\":3.666,\"enadeFaixa\":1}}", diff --git a/src/test/java/br/com/openenade/api/universidade/UniversidadeControllerTests.java b/src/test/java/br/com/openenade/api/universidade/UniversidadeControllerTests.java index a5a0d8f..b57338f 100644 --- a/src/test/java/br/com/openenade/api/universidade/UniversidadeControllerTests.java +++ b/src/test/java/br/com/openenade/api/universidade/UniversidadeControllerTests.java @@ -88,9 +88,9 @@ public void deleteTests() { private Set createCursos() { Set cursos = new HashSet(); Curso cursoCC = - this.cursoService.save(new Curso("CC", 13, Modalidade.EDUCACAO_PRESENCIAL)); + this.cursoService.addCurso(new Curso("CC", 13, Modalidade.EDUCACAO_PRESENCIAL)); Curso cursoEE = - this.cursoService.save(new Curso("EE", 14, Modalidade.EDUCACAO_PRESENCIAL)); + this.cursoService.addCurso(new Curso("EE", 14, Modalidade.EDUCACAO_PRESENCIAL)); cursos.add(cursoCC); cursos.add(cursoEE); return cursos; diff --git a/src/test/java/br/com/openenade/api/universidade/UniversidadeServiceTests.java b/src/test/java/br/com/openenade/api/universidade/UniversidadeServiceTests.java index c24cbbf..234ab8b 100644 --- a/src/test/java/br/com/openenade/api/universidade/UniversidadeServiceTests.java +++ b/src/test/java/br/com/openenade/api/universidade/UniversidadeServiceTests.java @@ -111,9 +111,9 @@ public void deleteUniversidadeByCodigoIESTest() { private Set createCursos() { Set cursos = new HashSet(); Curso cursoCC = - this.cursoService.save(new Curso("CC", 13, Modalidade.EDUCACAO_PRESENCIAL)); + this.cursoService.addCurso(new Curso("CC", 13, Modalidade.EDUCACAO_PRESENCIAL)); Curso cursoEE = - this.cursoService.save(new Curso("EE", 14, Modalidade.EDUCACAO_PRESENCIAL)); + this.cursoService.addCurso(new Curso("EE", 14, Modalidade.EDUCACAO_PRESENCIAL)); cursos.add(cursoCC); cursos.add(cursoEE); return cursos; From 477d8639050fa345573aa9ff330b09a9004b479f Mon Sep 17 00:00:00 2001 From: paulofelipefeitosa Date: Sun, 3 Mar 2019 13:44:28 -0300 Subject: [PATCH 2/2] Fix array out of bound bug --- .../java/br/com/openenade/api/modalidade/ModalidadeService.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/br/com/openenade/api/modalidade/ModalidadeService.java b/src/main/java/br/com/openenade/api/modalidade/ModalidadeService.java index 2341af6..d4b7439 100644 --- a/src/main/java/br/com/openenade/api/modalidade/ModalidadeService.java +++ b/src/main/java/br/com/openenade/api/modalidade/ModalidadeService.java @@ -6,7 +6,7 @@ public class ModalidadeService { public static Modalidade getModalidadeById(Integer id) { Modalidade[] modalidades = Modalidade.values(); - if (id < 0 || id > modalidades.length) { + if (id < 0 || id >= modalidades.length) { throw new ResourceNotFound( "Cannot find Modalidade with Id [" + Integer.toString(id) + "]"); } else {