From 600945bb1601917839d6947084b0b9b682e22a39 Mon Sep 17 00:00:00 2001 From: Alix JEUDI--LEMOINE Date: Wed, 28 Feb 2024 01:46:33 +0100 Subject: [PATCH] Jour 2 --- .../controllers/ScientifiqueController.java | 65 +++++++++---------- .../sae/controllers/ThematiqueController.java | 34 +++++++--- .../iut/sciencequest/sae/entities/Indice.java | 1 + .../sae/entities/Scientifique.java | 2 + .../sciencequest/sae/entities/Thematique.java | 1 + .../sae/entities/Utilisateur.java | 2 +- .../src/main/resources/application.properties | 3 +- 7 files changed, 63 insertions(+), 45 deletions(-) diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/ScientifiqueController.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/ScientifiqueController.java index 5127c6a..4c101e5 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/ScientifiqueController.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/ScientifiqueController.java @@ -20,6 +20,10 @@ import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; +import java.lang.reflect.InvocationTargetException; +import java.lang.reflect.Method; +import java.util.ArrayList; +import java.util.Arrays; import java.util.List; import java.util.Optional; @@ -37,6 +41,27 @@ public class ScientifiqueController { this.indiceRepository = indiceRepository; } + private CollectionModel> getPageableCollectionModel(Page pagedResult, Optional page, Method method, Object... args) { + List> entities = pagedResult.map(EntityModel::of).toList(); + + List selfObj = new ArrayList<>(List.of(args)); selfObj.add(page.orElse(0)); + Link selfLink = linkTo(ScientifiqueController.class, method, selfObj.toArray()).withSelfRel().expand(page.orElse(0)); + + CollectionModel> result = CollectionModel.of(entities, selfLink); + + if (pagedResult.hasPrevious()) { + List previousObj = new ArrayList<>(List.of(args)); previousObj.add(pagedResult.previousPageable().getPageNumber()); + result.add(linkTo(ScientifiqueController.class, method, previousObj.toArray()).withRel("previous")); + } + + if (pagedResult.hasNext()) { + List nextObj = new ArrayList<>(List.of(args)); nextObj.add(pagedResult.nextPageable().getPageNumber()); + result.add(linkTo(ScientifiqueController.class, method, nextObj.toArray()).withRel("next")); + } + + return result; + } + @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody public CollectionModel> getAllScientists(@RequestParam(name = "page") Optional page) { @@ -44,25 +69,11 @@ public class ScientifiqueController { Pageable paging = PageRequest.of(page.orElse(0), PAGE_SIZE); Page pagedResult = scientifiqueRepository.findAll(paging); - List> scientifiques = pagedResult.map(EntityModel::of).toList(); - - Link selfLink = linkTo(methodOn(ScientifiqueController.class).getAllScientists(page)).withSelfRel().expand(page.map(Object::toString).orElse("0")); - - CollectionModel> result = CollectionModel.of(scientifiques, selfLink); - - if (pagedResult.hasPrevious()) { - Link prevLink = linkTo(methodOn(ScientifiqueController.class).getAllScientists(Optional.of(pagedResult.previousPageable().getPageNumber()))).withRel("previous"); - result.add(prevLink.expand(pagedResult.previousPageable().getPageNumber())); - } - - if (pagedResult.hasNext()) { - Link nextLink = linkTo(methodOn(ScientifiqueController.class).getAllScientists(Optional.of(pagedResult.nextPageable().getPageNumber()))).withRel("next"); - result.add(nextLink.expand(pagedResult.nextPageable().getPageNumber())); - } - - return result; + return getPageableCollectionModel(pagedResult, page, ScientifiqueController.class.getMethod("getAllScientists", Optional.class)); } catch (IllegalArgumentException e) { throw new IncorrectPageException("numéro de page incorrect"); + } catch (NoSuchMethodException e) { + throw new RuntimeException(e); } } @@ -83,25 +94,11 @@ public class ScientifiqueController { Pageable paging = PageRequest.of(page.orElse(0), PAGE_SIZE); Page pagedResult = indiceRepository.findAll(paging); - List> indices = pagedResult.map(EntityModel::of).toList(); - - Link selfLink = linkTo(methodOn(ScientifiqueController.class).getScientistHints(id, page)).withSelfRel().expand(page.map(Object::toString).orElse("0")); - - CollectionModel> result = CollectionModel.of(indices, selfLink); - - if (pagedResult.hasPrevious()) { - Link prevLink = linkTo(methodOn(ScientifiqueController.class).getScientistHints(id, Optional.of(pagedResult.previousPageable().getPageNumber()))).withRel("previous"); - result.add(prevLink.expand(pagedResult.previousPageable().getPageNumber())); - } - - if (pagedResult.hasNext()) { - Link nextLink = linkTo(methodOn(ScientifiqueController.class).getScientistHints(id, Optional.of(pagedResult.nextPageable().getPageNumber()))).withRel("next"); - result.add(nextLink.expand(pagedResult.nextPageable().getPageNumber())); - } - - return result; + return getPageableCollectionModel(pagedResult, page, ScientifiqueController.class.getMethod("getScientistHints", int.class, Optional.class), id); } catch (IllegalArgumentException e) { throw new IncorrectPageException("numéro de page incorrect"); + } catch (NoSuchMethodException e) { + throw new RuntimeException(e); } } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/ThematiqueController.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/ThematiqueController.java index ef6401c..c5f4e88 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/ThematiqueController.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/ThematiqueController.java @@ -4,11 +4,22 @@ import fr.iut.sciencequest.sae.entities.Thematique; import fr.iut.sciencequest.sae.exceptions.DuplicatedEntity; import fr.iut.sciencequest.sae.repositories.ThematiqueRepository; import jakarta.servlet.http.HttpServletRequest; +import jakarta.validation.ConstraintViolationException; +import jakarta.validation.Valid; import org.springframework.dao.DataIntegrityViolationException; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.Errors; +import org.springframework.validation.FieldError; +import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.*; +import java.sql.SQLIntegrityConstraintViolationException; +import java.util.HashMap; +import java.util.List; +import java.util.Map; + @RestController @RequestMapping("/api/v1/thematiques") public class ThematiqueController { @@ -18,6 +29,17 @@ public class ThematiqueController { public ThematiqueController(ThematiqueRepository thematiqueRepository) { this.thematiqueRepository = thematiqueRepository; } +/* + @ExceptionHandler(ConstraintViolationException.class) + public void t(ConstraintViolationException e){ + throw new RuntimeException(); + }*/ + + @ExceptionHandler(org.hibernate.exception.ConstraintViolationException.class) + public void + handleConstraintViolationException(ConstraintViolationException ex){ + System.out.println("o ?"); + } @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) @ResponseStatus(HttpStatus.OK) @@ -27,14 +49,8 @@ public class ThematiqueController { @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) @ResponseStatus(HttpStatus.CREATED) - public Thematique postThematique(@RequestBody Thematique thematique, HttpServletRequest request){ - if(this.thematiqueRepository.existsById(thematique.getId())) - throw new DuplicatedEntity("Une thématique avec l'ID "+thematique.getId()+" existe déjà"); - try{ - thematique = this.thematiqueRepository.save(thematique); - return thematique; - } catch (DataIntegrityViolationException e) { - throw new DuplicatedEntity("Une thématique avec le libelle : " + thematique.getLibelle() + " existe déjà"); - } + public Thematique postThematique(@Valid @RequestBody Thematique thematique){ + thematique = this.thematiqueRepository.save(thematique); + return thematique; } } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Indice.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Indice.java index 1d919ed..1f98e69 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Indice.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Indice.java @@ -22,5 +22,6 @@ public class Indice { private String libelle; @NotNull + @Column(name="idscientifique") private int idScientifique; } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Scientifique.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Scientifique.java index 336cae0..c09d3aa 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Scientifique.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Scientifique.java @@ -8,6 +8,7 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.RequiredArgsConstructor; import org.hibernate.annotations.Type; +import org.hibernate.validator.constraints.URL; import java.util.Date; @@ -32,6 +33,7 @@ public class Scientifique { @JoinColumn(name="idthematique") private Thematique thematique; + @URL @Column(name = "photo") private String pathToPhoto; diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Thematique.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Thematique.java index e825295..d3dfc80 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Thematique.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Thematique.java @@ -6,6 +6,7 @@ import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Data; import lombok.NoArgsConstructor; +import org.hibernate.validator.constraints.UniqueElements; @NoArgsConstructor @AllArgsConstructor diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Utilisateur.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Utilisateur.java index 05ee7ee..21466aa 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Utilisateur.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Utilisateur.java @@ -23,7 +23,7 @@ public class Utilisateur extends Joueur{ private String email; @NotBlank - @Column(name = "motdepasse") + @Column(name = "password") private String motDePasse; } diff --git a/SpringBootProject/src/main/resources/application.properties b/SpringBootProject/src/main/resources/application.properties index 7a7d2de..0e56643 100644 --- a/SpringBootProject/src/main/resources/application.properties +++ b/SpringBootProject/src/main/resources/application.properties @@ -5,4 +5,5 @@ spring.datasource.driver-class-name=org.postgresql.Driver spring.sql.init.mode=always spring.sql.init.schema-locations=classpath:schema.sql spring.jackson.serialization.indent_output = true -server.error.include-message=always \ No newline at end of file +server.error.include-message=always +spring.jpa.open-in-view=false \ No newline at end of file