From 81a33c9460e96dfcc3aa5f1dc9974aa454fc6bec Mon Sep 17 00:00:00 2001 From: visoulier Date: Fri, 1 Mar 2024 02:59:36 +0100 Subject: [PATCH] =?UTF-8?q?jour=205=20--=20d=C3=A9but=20journ=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../ThematiqueSimpleModelAssembler.java | 23 +++++++++++++++++++ .../sae/controllers/QuestionController.java | 12 ++++------ .../sae/controllers/ThematiqueController.java | 17 ++++++++++++-- .../sae/exceptions/ValidationHandler.java | 8 ++++--- .../sae/repositories/QuestionRepository.java | 7 +++++- .../sae/repositories/ReponseRepository.java | 7 +++++- .../repositories/ThematiqueRepository.java | 3 ++- .../sae/services/IndiceService.java | 16 +++++++++++++ .../sae/services/ThematiqueService.java | 13 +++++------ .../interfaces/IThematiqueService.java | 4 +++- 10 files changed, 87 insertions(+), 23 deletions(-) create mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/ThematiqueSimpleModelAssembler.java diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/ThematiqueSimpleModelAssembler.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/ThematiqueSimpleModelAssembler.java new file mode 100644 index 0000000..98d85c9 --- /dev/null +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/ThematiqueSimpleModelAssembler.java @@ -0,0 +1,23 @@ +package fr.iut.sciencequest.sae.assemblers; + +import fr.iut.sciencequest.sae.dto.thematique.ThematiqueSimpleDTO; +import fr.iut.sciencequest.sae.entities.Thematique; +import jakarta.annotation.Nullable; +import org.modelmapper.ModelMapper; +import org.springframework.hateoas.server.mvc.RepresentationModelAssemblerSupport; +import org.springframework.lang.NonNull; +import org.springframework.stereotype.Component; + +@Component +public class ThematiqueSimpleModelAssembler extends RepresentationModelAssemblerSupport { + public ThematiqueSimpleModelAssembler() { + super(Thematique.class, ThematiqueSimpleDTO.class); + } + + @Override + @NonNull + public ThematiqueSimpleDTO toModel(@Nullable Thematique entity) { + ModelMapper mapper = new ModelMapper(); + return mapper.map(entity, ThematiqueSimpleDTO.class); + } +} diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/QuestionController.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/QuestionController.java index 246b3f1..46be709 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/QuestionController.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/QuestionController.java @@ -26,13 +26,11 @@ public class QuestionController extends Controller { @RequestMapping(method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody - public PagedModel getAllQuestions(@PageableDefault(size = ApplicationConfig.DEFAULT_PAGEABLE_SIZE) Pageable p) { - try { - Page questionPage = questionService.findAll(p); - return pagedResourcesAssembler.toModel(questionPage, questionModelAssembler); - } catch (IllegalArgumentException e) { - throw new IncorrectPageException("numéro de page incorrect"); - } + public PagedModel getAllQuestions(@PageableDefault(size = ApplicationConfig.DEFAULT_PAGEABLE_SIZE) Pageable p/*, + @RequestParam(value = "scientifiqueId", defaultValue = "-1") Integer scientifiqueId*/) { + + //Page questionPage = (scientifiqueId.equals(-1) ? questionService.findAll(p) : questionService.findAll(p)); //TEMPORAIRE NE PAS ENLEVER + return pagedResourcesAssembler.toModel(questionService.findAll(p), questionModelAssembler); } } 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 a86b9f1..1e1ce85 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 @@ -1,13 +1,23 @@ package fr.iut.sciencequest.sae.controllers; +import fr.iut.sciencequest.sae.ApplicationConfig; import fr.iut.sciencequest.sae.assemblers.IndiceModelAssembler; import fr.iut.sciencequest.sae.assemblers.ThematiqueModelAssembler; +import fr.iut.sciencequest.sae.assemblers.ThematiqueSimpleModelAssembler; import fr.iut.sciencequest.sae.dto.thematique.ThematiqueDTO; +import fr.iut.sciencequest.sae.dto.thematique.ThematiqueSimpleDTO; +import fr.iut.sciencequest.sae.entities.Difficulte; import fr.iut.sciencequest.sae.entities.Thematique; import fr.iut.sciencequest.sae.services.interfaces.IThematiqueService; import jakarta.validation.Valid; import lombok.AllArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.web.PageableDefault; +import org.springframework.data.web.PagedResourcesAssembler; import org.springframework.hateoas.CollectionModel; +import org.springframework.hateoas.EntityModel; +import org.springframework.hateoas.PagedModel; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; @@ -19,11 +29,14 @@ import org.springframework.web.bind.annotation.*; public class ThematiqueController extends Controller { private final IThematiqueService thematiqueService; private final ThematiqueModelAssembler thematiqueModelAssembler; + private final ThematiqueSimpleModelAssembler thematiqueSimpleModelAssembler; + @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection") + private final PagedResourcesAssembler pagedResourcesAssembler; @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) @ResponseStatus(HttpStatus.OK) - public CollectionModel getAllThematiques() { - return getSelfLinkCollectionModel(this.thematiqueService.findAll(), "getAllThematiques"); + public PagedModel getAllThematiques(@PageableDefault(size = ApplicationConfig.DEFAULT_PAGEABLE_SIZE) Pageable p) { + return pagedResourcesAssembler.toModel(this.thematiqueService.findAll(p), thematiqueSimpleModelAssembler); } //TODO : gestion des erreurs remontées par @Valid diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/ValidationHandler.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/ValidationHandler.java index 2cb0d5d..e72da29 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/ValidationHandler.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/ValidationHandler.java @@ -5,7 +5,9 @@ import java.util.Map; import org.springframework.http.HttpHeaders; import org.springframework.http.HttpStatus; +import org.springframework.http.HttpStatusCode; import org.springframework.http.ResponseEntity; +import org.springframework.lang.Nullable; import org.springframework.validation.FieldError; import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.ControllerAdvice; @@ -18,10 +20,10 @@ import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExcep public class ValidationHandler extends ResponseEntityExceptionHandler { - @ExceptionHandler(MethodArgumentNotValidException.class) + @Nullable + @Override @ResponseStatus(HttpStatus.BAD_REQUEST) - protected ResponseEntity hand(MethodArgumentNotValidException ex) { - + public ResponseEntity handleMethodArgumentNotValid(MethodArgumentNotValidException ex, HttpHeaders headers, HttpStatusCode status, WebRequest request) { Map errors = new HashMap<>(); ex.getBindingResult().getAllErrors().forEach((error) ->{ diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/QuestionRepository.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/QuestionRepository.java index 42cfeb3..15d0999 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/QuestionRepository.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/QuestionRepository.java @@ -4,5 +4,10 @@ import fr.iut.sciencequest.sae.entities.Question; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository -public interface QuestionRepository extends JpaRepository {} +public interface QuestionRepository extends JpaRepository { + + +} diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/ReponseRepository.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/ReponseRepository.java index 8eff9b1..ca091d5 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/ReponseRepository.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/ReponseRepository.java @@ -1,8 +1,13 @@ package fr.iut.sciencequest.sae.repositories; +import fr.iut.sciencequest.sae.entities.Question; import fr.iut.sciencequest.sae.entities.Reponse; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Repository; +import java.util.List; + @Repository -public interface ReponseRepository extends CrudRepository {} +public interface ReponseRepository extends CrudRepository { + +} diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/ThematiqueRepository.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/ThematiqueRepository.java index accfefe..e240a86 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/ThematiqueRepository.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/ThematiqueRepository.java @@ -1,12 +1,13 @@ package fr.iut.sciencequest.sae.repositories; import fr.iut.sciencequest.sae.entities.Thematique; +import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Repository; @Repository -public interface ThematiqueRepository extends CrudRepository { +public interface ThematiqueRepository extends JpaRepository { boolean existsByLibelle(String libelle); Thematique findThematiqueByLibelleEqualsIgnoreCase(String thematique); } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/IndiceService.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/IndiceService.java index 7c4e9b9..b052f9f 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/IndiceService.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/IndiceService.java @@ -7,6 +7,8 @@ import fr.iut.sciencequest.sae.repositories.IndiceRepository; import fr.iut.sciencequest.sae.services.interfaces.IIndiceService; import org.springframework.stereotype.Service; +import java.lang.reflect.Field; + @Service public class IndiceService implements IIndiceService { @@ -36,4 +38,18 @@ public class IndiceService implements IIndiceService { } return this.indiceRepository.save(indice); } + + public Indice patch(Indice incompleteIndice, Indice destIndice) throws IllegalAccessException { + Class indiceClass = Indice.class; + Field[] indiceFields = indiceClass.getDeclaredFields(); + for(Field field: indiceFields){ + field.setAccessible(true); + Object value = field.get(incompleteIndice); + if(value != null){ + field.set(destIndice, value); + } + field.setAccessible(false); + } + return destIndice; + } } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/ThematiqueService.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/ThematiqueService.java index 2434cc8..1df8fd8 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/ThematiqueService.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/ThematiqueService.java @@ -6,17 +6,16 @@ import fr.iut.sciencequest.sae.exceptions.DuplicatedIdException; import fr.iut.sciencequest.sae.exceptions.notFound.ThematiqueNotFoundException; import fr.iut.sciencequest.sae.repositories.ThematiqueRepository; import fr.iut.sciencequest.sae.services.interfaces.IThematiqueService; +import lombok.AllArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; +@AllArgsConstructor @Service public class ThematiqueService implements IThematiqueService { - private final ThematiqueRepository thematiqueRepository; - public ThematiqueService(ThematiqueRepository thematiqueRepository){ - this.thematiqueRepository = thematiqueRepository; - } - private void checkFieldsConstraints(Thematique thematique){ if(this.thematiqueRepository.existsByLibelle(thematique.getLibelle())){ throw new DuplicatedFieldException("libelle"); @@ -41,8 +40,8 @@ public class ThematiqueService implements IThematiqueService { } @Override - public Iterable findAll(){ - return this.thematiqueRepository.findAll(); + public Page findAll(Pageable p){ + return this.thematiqueRepository.findAll(p); } } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/interfaces/IThematiqueService.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/interfaces/IThematiqueService.java index 8296cf3..2970806 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/interfaces/IThematiqueService.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/interfaces/IThematiqueService.java @@ -2,11 +2,13 @@ package fr.iut.sciencequest.sae.services.interfaces; import fr.iut.sciencequest.sae.entities.Thematique; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; public interface IThematiqueService { Thematique update(Thematique thematique); Thematique create(Thematique thematique); - Iterable findAll(); + Page findAll(Pageable p); }