From 8347cd163e98ae2bdec042f803f182b39151d450 Mon Sep 17 00:00:00 2001 From: visoulier Date: Fri, 1 Mar 2024 02:14:15 +0100 Subject: [PATCH] =?UTF-8?q?jour=204=20--=20fin=20de=20journ=C3=A9e?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../assemblers/DifficulteModelAssembler.java | 2 + .../sae/assemblers/IndiceModelAssembler.java | 42 +++++++++++++ .../ScientifiqueModelAssembler.java | 10 +++- .../assemblers/ThematiqueModelAssembler.java | 23 +++++++ .../sae/controllers/IndiceController.java | 16 ++++- .../sae/controllers/PartieController.java | 1 + .../controllers/ScientifiqueController.java | 42 +++++++------ .../sae/controllers/ThematiqueController.java | 18 +++--- ...dminDTO.java => AdminWithPasswordDTO.java} | 4 +- .../sae/dto/difficulte/DifficulteDTO.java | 7 ++- .../dto/difficulte/DifficulteSimpleDTO.java | 19 ++++++ .../sae/dto/indice/IndiceDTO.java | 18 +++--- .../sae/dto/indice/IndiceLibelleOnlyDTO.java | 18 ++++++ .../IndiceSimpleWithScientifiquesIdDTO.java | 25 ++++++++ ...outIdAndScientifiqueIdOnlyForPatchDTO.java | 22 +++++++ .../sae/dto/invite/InviteDTO.java | 2 +- .../iut/sciencequest/sae/dto/jeu/JeuDTO.java | 4 +- .../sae/dto/joueur/JoueurDTO.java | 2 +- .../sae/dto/partie/PartieDTO.java | 9 +-- .../sae/dto/question/QuestionDTO.java | 4 +- .../sae/dto/reponse/ReponseDTO.java | 7 ++- .../sae/dto/scientifique/ScientifiqueDTO.java | 9 +-- .../scientifique/ScientifiqueIdOnlyDTO.java | 18 ++++++ .../sae/dto/thematique/ThematiqueDTO.java | 7 ++- .../dto/thematique/ThematiqueSimpleDTO.java | 21 +++++++ .../sae/dto/utilisateur/UtilisateurDTO.java | 6 +- .../UtilisateurWithPasswordDTO.java | 34 +++++++++++ .../iut/sciencequest/sae/entities/Admin.java | 5 +- .../sciencequest/sae/entities/BaseEntity.java | 12 ---- .../sciencequest/sae/entities/Difficulte.java | 23 +++++-- .../sae/entities/IToProjection.java | 5 -- .../iut/sciencequest/sae/entities/Indice.java | 26 ++++++++ .../iut/sciencequest/sae/entities/Invite.java | 1 - .../fr/iut/sciencequest/sae/entities/Jeu.java | 7 +-- .../sae/entities/{joueur => }/Joueur.java | 13 ++-- .../iut/sciencequest/sae/entities/Partie.java | 16 ++--- .../sciencequest/sae/entities/Question.java | 11 ++-- .../sciencequest/sae/entities/Reponse.java | 10 +++- .../sae/entities/Scientifique.java | 60 +++++++++++++++++++ .../sciencequest/sae/entities/Thematique.java | 21 +++++-- .../sae/entities/Utilisateur.java | 4 -- ...ibelleAndScientifiqueIdOnlyProjection.java | 10 ---- .../entities/indice/IValidateOnlyLibelle.java | 3 - .../sae/entities/indice/Indice.java | 37 ------------ .../joueur/IIdAndPseudoOnlyProjection.java | 6 -- .../IScientifiqueIdOnlyProjection.java | 5 -- .../entities/scientifique/Scientifique.java | 58 ------------------ .../sae/exceptions/ValidationHandler.java | 34 +++++++++++ .../notFound/DifficulteNotFoundException.java | 7 +++ .../notFound/ThematiqueNotFoundException.java | 2 +- .../repositories/DifficulteRepository.java | 4 +- .../sae/repositories/IndiceRepository.java | 4 +- .../sae/repositories/JoueurRepository.java | 2 +- .../repositories/ScientifiqueRepository.java | 13 +++- .../repositories/ThematiqueRepository.java | 1 + .../sae/services/IndiceService.java | 7 +-- .../sae/services/ScientifiqueService.java | 46 ++++++++++---- .../services/interfaces/IIndiceService.java | 5 +- .../interfaces/IScientifiqueService.java | 7 ++- 59 files changed, 577 insertions(+), 278 deletions(-) create mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/IndiceModelAssembler.java create mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/ThematiqueModelAssembler.java rename SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/admin/{AdminDTO.java => AdminWithPasswordDTO.java} (84%) create mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/difficulte/DifficulteSimpleDTO.java create mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/indice/IndiceLibelleOnlyDTO.java create mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/indice/IndiceSimpleWithScientifiquesIdDTO.java create mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/indice/IndiceWithoutIdAndScientifiqueIdOnlyForPatchDTO.java create mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/scientifique/ScientifiqueIdOnlyDTO.java create mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/thematique/ThematiqueSimpleDTO.java create mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/utilisateur/UtilisateurWithPasswordDTO.java delete mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/BaseEntity.java delete mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/IToProjection.java create mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Indice.java rename SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/{joueur => }/Joueur.java (53%) create mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Scientifique.java delete mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/indice/IIndiceidAndLibelleAndScientifiqueIdOnlyProjection.java delete mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/indice/IValidateOnlyLibelle.java delete mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/indice/Indice.java delete mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/joueur/IIdAndPseudoOnlyProjection.java delete mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/scientifique/IScientifiqueIdOnlyProjection.java delete mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/scientifique/Scientifique.java create mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/ValidationHandler.java create mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/notFound/DifficulteNotFoundException.java diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/DifficulteModelAssembler.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/DifficulteModelAssembler.java index a571766..14703bb 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/DifficulteModelAssembler.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/DifficulteModelAssembler.java @@ -3,6 +3,7 @@ package fr.iut.sciencequest.sae.assemblers; import fr.iut.sciencequest.sae.dto.difficulte.DifficulteDTO; import fr.iut.sciencequest.sae.entities.Difficulte; import jakarta.annotation.Nullable; +import lombok.RequiredArgsConstructor; import org.modelmapper.ModelMapper; import org.springframework.hateoas.server.mvc.RepresentationModelAssemblerSupport; import org.springframework.lang.NonNull; @@ -20,4 +21,5 @@ public class DifficulteModelAssembler extends RepresentationModelAssemblerSuppor ModelMapper mapper = new ModelMapper(); return mapper.map(entity, DifficulteDTO.class); } + } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/IndiceModelAssembler.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/IndiceModelAssembler.java new file mode 100644 index 0000000..9f7fd5f --- /dev/null +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/IndiceModelAssembler.java @@ -0,0 +1,42 @@ +package fr.iut.sciencequest.sae.assemblers; + + +import fr.iut.sciencequest.sae.controllers.ScientifiqueController; +import org.springframework.hateoas.CollectionModel; +import fr.iut.sciencequest.sae.dto.indice.IndiceSimpleWithScientifiquesIdDTO; +import fr.iut.sciencequest.sae.entities.Indice; +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; + +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; + +@Component +public class IndiceModelAssembler extends RepresentationModelAssemblerSupport { + public IndiceModelAssembler() { + super(Indice.class, IndiceSimpleWithScientifiquesIdDTO.class); + } + + @Override + @NonNull + public IndiceSimpleWithScientifiquesIdDTO toModel(@Nullable Indice entity) { + ModelMapper mapper = new ModelMapper(); + return mapper.map(entity, IndiceSimpleWithScientifiquesIdDTO.class); + } + + @Override + @NonNull + public CollectionModel toCollectionModel(@Nullable Iterable entities) { + assert entities != null; + CollectionModel collectionModel = super.toCollectionModel(entities); + // Le lien n'est pas ajouté automatiquement si l'on utilise pas la pagination /!\ + if(collectionModel.iterator().hasNext()) + collectionModel.add(linkTo(methodOn(ScientifiqueController.class).getScientistHints(collectionModel.iterator().next().getScientifique().getId())).withSelfRel()); + + return collectionModel; + } + +} diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/ScientifiqueModelAssembler.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/ScientifiqueModelAssembler.java index 1d9f316..3e36f72 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/ScientifiqueModelAssembler.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/ScientifiqueModelAssembler.java @@ -2,13 +2,16 @@ package fr.iut.sciencequest.sae.assemblers; import fr.iut.sciencequest.sae.controllers.ScientifiqueController; import fr.iut.sciencequest.sae.dto.scientifique.ScientifiqueDTO; -import fr.iut.sciencequest.sae.entities.scientifique.Scientifique; +import fr.iut.sciencequest.sae.entities.Scientifique; 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; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; +import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; + @Component public class ScientifiqueModelAssembler extends RepresentationModelAssemblerSupport { public ScientifiqueModelAssembler() { @@ -19,6 +22,9 @@ public class ScientifiqueModelAssembler extends RepresentationModelAssemblerSupp @NonNull public ScientifiqueDTO toModel(@Nullable Scientifique entity) { ModelMapper mapper = new ModelMapper(); - return mapper.map(entity, ScientifiqueDTO.class); + ScientifiqueDTO scientifiqueDTO = mapper.map(entity, ScientifiqueDTO.class); + scientifiqueDTO.add(linkTo(methodOn(ScientifiqueController.class).getScientistHints(scientifiqueDTO.getId())).withRel("indices")); + scientifiqueDTO.add(linkTo(methodOn(ScientifiqueController.class).getScientistById(scientifiqueDTO.getId())).withSelfRel()); + return scientifiqueDTO; } } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/ThematiqueModelAssembler.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/ThematiqueModelAssembler.java new file mode 100644 index 0000000..d6bfbc6 --- /dev/null +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/ThematiqueModelAssembler.java @@ -0,0 +1,23 @@ +package fr.iut.sciencequest.sae.assemblers; + +import fr.iut.sciencequest.sae.dto.thematique.ThematiqueDTO; +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 ThematiqueModelAssembler extends RepresentationModelAssemblerSupport { + public ThematiqueModelAssembler() { + super(Thematique.class, ThematiqueDTO.class); + } + + @Override + @NonNull + public ThematiqueDTO toModel(@Nullable Thematique entity) { + ModelMapper mapper = new ModelMapper(); + return mapper.map(entity, ThematiqueDTO.class); + } +} diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/IndiceController.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/IndiceController.java index 86ff99b..b1b88f6 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/IndiceController.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/IndiceController.java @@ -1,8 +1,15 @@ package fr.iut.sciencequest.sae.controllers; -import fr.iut.sciencequest.sae.entities.indice.Indice; +import com.fasterxml.jackson.databind.JsonMappingException; +import com.fasterxml.jackson.databind.ObjectMapper; +import fr.iut.sciencequest.sae.dto.indice.IndiceSimpleWithScientifiquesIdDTO; +import fr.iut.sciencequest.sae.dto.indice.IndiceWithoutIdAndScientifiqueIdOnlyForPatchDTO; +import fr.iut.sciencequest.sae.entities.Indice; +import fr.iut.sciencequest.sae.repositories.IndiceRepository; import fr.iut.sciencequest.sae.services.IndiceService; +import jakarta.validation.Valid; import lombok.AllArgsConstructor; +import org.modelmapper.ModelMapper; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; @@ -12,11 +19,14 @@ import org.springframework.web.bind.annotation.*; @RequestMapping("/api/v1/indices") public class IndiceController extends Controller { private final IndiceService indiceService; + private final ModelMapper modelMapper; @PatchMapping(value="/{id}", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseStatus(HttpStatus.OK) - public Indice patchIndice(@PathVariable("id") int id, @RequestBody Indice indice){ + public IndiceSimpleWithScientifiquesIdDTO patchIndice(@PathVariable("id") int id, @RequestBody @Valid IndiceWithoutIdAndScientifiqueIdOnlyForPatchDTO indiceInput) throws JsonMappingException { + Indice indice = this.modelMapper.map(indiceInput, Indice.class); indice.setId(id); - return this.indiceService.update(indice); + + return this.modelMapper.map(this.indiceService.update(indice), IndiceSimpleWithScientifiquesIdDTO.class); } } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/PartieController.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/PartieController.java index 142c378..9ac792c 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/PartieController.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/PartieController.java @@ -5,6 +5,7 @@ import fr.iut.sciencequest.sae.dto.partie.PartieDTO; import fr.iut.sciencequest.sae.entities.Partie; import fr.iut.sciencequest.sae.services.PartieService; import lombok.AllArgsConstructor; +import org.modelmapper.ModelMapper; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; 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 a8bb205..6ab823b 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 @@ -1,16 +1,21 @@ 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.ScientifiqueModelAssembler; +import fr.iut.sciencequest.sae.dto.indice.IndiceDTO; +import fr.iut.sciencequest.sae.dto.indice.IndiceLibelleOnlyDTO; +import fr.iut.sciencequest.sae.dto.indice.IndiceSimpleWithScientifiquesIdDTO; import fr.iut.sciencequest.sae.dto.scientifique.ScientifiqueDTO; -import fr.iut.sciencequest.sae.entities.scientifique.Scientifique; -import fr.iut.sciencequest.sae.entities.indice.IIndiceidAndLibelleAndScientifiqueIdOnlyProjection; -import fr.iut.sciencequest.sae.entities.indice.Indice; -import fr.iut.sciencequest.sae.entities.indice.IValidateOnlyLibelle; +import fr.iut.sciencequest.sae.entities.Scientifique; +import fr.iut.sciencequest.sae.entities.Indice; import fr.iut.sciencequest.sae.exceptions.IncorrectPageException; import fr.iut.sciencequest.sae.services.IndiceService; import fr.iut.sciencequest.sae.services.interfaces.IScientifiqueService; +import jakarta.validation.Valid; import lombok.AllArgsConstructor; +import org.modelmapper.ModelMapper; +import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; import org.springframework.data.web.PageableDefault; import org.springframework.data.web.PagedResourcesAssembler; @@ -19,7 +24,6 @@ import org.springframework.hateoas.EntityModel; import org.springframework.hateoas.PagedModel; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; -import org.springframework.validation.annotation.Validated; import org.springframework.web.bind.annotation.*; @RestController @@ -29,34 +33,36 @@ public class ScientifiqueController extends Controller { private final IScientifiqueService scientifiqueService; private final ScientifiqueModelAssembler scientifiqueModelAssembler; + private final IndiceModelAssembler indiceModelAssembler; @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection") private final PagedResourcesAssembler pagedResourcesAssembler; private final IndiceService indiceService; + private final ModelMapper modelMapper; @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) - public PagedModel getAllScientists(@PageableDefault(size = ApplicationConfig.DEFAULT_PAGEABLE_SIZE) Pageable p) { - try { - return pagedResourcesAssembler.toModel(this.scientifiqueService.findAll(p), scientifiqueModelAssembler); - } catch (IllegalArgumentException e) { - throw new IncorrectPageException("numéro de page incorrect"); - } + public PagedModel getAllScientists(@PageableDefault(size = ApplicationConfig.DEFAULT_PAGEABLE_SIZE) Pageable p, + @RequestParam(value = "thematiqueId", defaultValue = "-1") Integer thematiqueId, + @RequestParam(value = "difficulteId", defaultValue = "-1") Integer difficulteId) { + + Page page = (thematiqueId.equals(-1) && difficulteId.equals(-1) ? this.scientifiqueService.findAll(p) : this.scientifiqueService.findAllWithCriteria(p, thematiqueId, difficulteId)); + return pagedResourcesAssembler.toModel(page, scientifiqueModelAssembler); } @GetMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE) - public EntityModel getScientistById(@PathVariable Integer id) { - return getSelfLinkEntityModel(this.scientifiqueService.findById(id), "getScientistById", id); + public ScientifiqueDTO getScientistById(@PathVariable Integer id) { + return scientifiqueModelAssembler.toModel(this.scientifiqueService.findById(id)); } @GetMapping(value="/{id}/indices", produces = MediaType.APPLICATION_JSON_VALUE) - public CollectionModel getScientistHints(@PathVariable Integer id) { - return getSelfLinkCollectionModel(this.scientifiqueService.getLinkedIndicesByScientifiqueId(id), "getScientistHints", id); + public CollectionModel getScientistHints(@PathVariable Integer id) { + return indiceModelAssembler.toCollectionModel(this.scientifiqueService.getLinkedIndicesByScientifiqueId(id)); } @PostMapping(value="/{id}/indices", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseStatus(HttpStatus.CREATED) - public IIndiceidAndLibelleAndScientifiqueIdOnlyProjection postIndice(@PathVariable Integer id, @Validated(IValidateOnlyLibelle.class) @RequestBody Indice indice){ + public IndiceSimpleWithScientifiquesIdDTO postIndice(@PathVariable Integer id, @Valid @RequestBody IndiceLibelleOnlyDTO indiceWithLibelleOnly) { + Indice indice = this.modelMapper.map(indiceWithLibelleOnly, Indice.class); indice.setScientifique(this.scientifiqueService.findById(id)); - indice = this.indiceService.create(indice); - return indice.toProjection(IIndiceidAndLibelleAndScientifiqueIdOnlyProjection.class); + return this.modelMapper.map(this.indiceService.create(indice), IndiceSimpleWithScientifiquesIdDTO.class); } } 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 2df1eb6..a86b9f1 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,8 +1,12 @@ package fr.iut.sciencequest.sae.controllers; +import fr.iut.sciencequest.sae.assemblers.IndiceModelAssembler; +import fr.iut.sciencequest.sae.assemblers.ThematiqueModelAssembler; +import fr.iut.sciencequest.sae.dto.thematique.ThematiqueDTO; 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.hateoas.CollectionModel; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; @@ -10,13 +14,11 @@ import org.springframework.web.bind.annotation.*; @RestController +@AllArgsConstructor @RequestMapping("/api/v1/thematiques") public class ThematiqueController extends Controller { private final IThematiqueService thematiqueService; - - public ThematiqueController(IThematiqueService thematiqueService) { - this.thematiqueService = thematiqueService; - } + private final ThematiqueModelAssembler thematiqueModelAssembler; @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) @ResponseStatus(HttpStatus.OK) @@ -28,14 +30,14 @@ public class ThematiqueController extends Controller { //TODO : ajouter liens hateos @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) @ResponseStatus(HttpStatus.CREATED) - public Thematique createThematique(@Valid @RequestBody Thematique thematique){ - return this.thematiqueService.create(thematique); + public ThematiqueDTO createThematique(@Valid @RequestBody Thematique thematique) { + return thematiqueModelAssembler.toModel(this.thematiqueService.create(thematique)); } @PatchMapping(path = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) @ResponseStatus(HttpStatus.CREATED) - public Thematique updateThematique(@PathVariable("id") int id, @Valid @RequestBody Thematique thematique){ + public ThematiqueDTO updateThematique(@PathVariable("id") int id, @Valid @RequestBody Thematique thematique) { thematique.setId(id); - return this.thematiqueService.update(thematique); + return thematiqueModelAssembler.toModel(this.thematiqueService.update(thematique)); } } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/admin/AdminDTO.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/admin/AdminWithPasswordDTO.java similarity index 84% rename from SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/admin/AdminDTO.java rename to SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/admin/AdminWithPasswordDTO.java index 86eeac3..9be1c50 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/admin/AdminDTO.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/admin/AdminWithPasswordDTO.java @@ -15,9 +15,9 @@ import org.springframework.hateoas.RepresentationModel; @AllArgsConstructor @EqualsAndHashCode(callSuper = false) @JsonInclude(JsonInclude.Include.NON_NULL) -public class AdminDTO extends RepresentationModel { +public class AdminWithPasswordDTO extends RepresentationModel { @NotNull - private int id; + private Integer id; @Email @NotNull diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/difficulte/DifficulteDTO.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/difficulte/DifficulteDTO.java index 6047d64..66bfcef 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/difficulte/DifficulteDTO.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/difficulte/DifficulteDTO.java @@ -1,6 +1,6 @@ package fr.iut.sciencequest.sae.dto.difficulte; -import com.fasterxml.jackson.annotation.JsonInclude; +import fr.iut.sciencequest.sae.entities.Scientifique; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.*; @@ -13,11 +13,12 @@ import org.springframework.hateoas.RepresentationModel; @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(callSuper = false) -@JsonInclude(JsonInclude.Include.NON_NULL) public class DifficulteDTO extends RepresentationModel { @NotNull - private int id; + private Integer id; @NotBlank private String libelle; + + private Iterable scientifiques; } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/difficulte/DifficulteSimpleDTO.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/difficulte/DifficulteSimpleDTO.java new file mode 100644 index 0000000..b23692a --- /dev/null +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/difficulte/DifficulteSimpleDTO.java @@ -0,0 +1,19 @@ +package fr.iut.sciencequest.sae.dto.difficulte; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.*; +import org.springframework.hateoas.RepresentationModel; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = false) +public class DifficulteSimpleDTO extends RepresentationModel { + @NotNull + private Integer id; + + @NotBlank + private String libelle; +} diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/indice/IndiceDTO.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/indice/IndiceDTO.java index d1a936e..ee19b5c 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/indice/IndiceDTO.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/indice/IndiceDTO.java @@ -1,15 +1,14 @@ package fr.iut.sciencequest.sae.dto.indice; import com.fasterxml.jackson.annotation.JsonInclude; -import fr.iut.sciencequest.sae.entities.Reponse; -import jakarta.validation.constraints.NotEmpty; +import fr.iut.sciencequest.sae.dto.scientifique.ScientifiqueDTO; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.*; import org.springframework.hateoas.RepresentationModel; -import java.util.List; - @Data @Builder @NoArgsConstructor @@ -18,8 +17,11 @@ import java.util.List; @JsonInclude(JsonInclude.Include.NON_NULL) public class IndiceDTO extends RepresentationModel { @NotNull - private int id; - private String question; - @NotEmpty - private List reponses; + private Integer id; + + @NotBlank + private String libelle; + + @NotNull + private ScientifiqueDTO scientifique; } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/indice/IndiceLibelleOnlyDTO.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/indice/IndiceLibelleOnlyDTO.java new file mode 100644 index 0000000..7fae842 --- /dev/null +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/indice/IndiceLibelleOnlyDTO.java @@ -0,0 +1,18 @@ +package fr.iut.sciencequest.sae.dto.indice; + +import com.fasterxml.jackson.annotation.JsonInclude; +import jakarta.validation.constraints.NotBlank; +import lombok.*; +import org.springframework.hateoas.RepresentationModel; + + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class IndiceLibelleOnlyDTO extends RepresentationModel { + @NotBlank + private String libelle; +} diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/indice/IndiceSimpleWithScientifiquesIdDTO.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/indice/IndiceSimpleWithScientifiquesIdDTO.java new file mode 100644 index 0000000..ab84db6 --- /dev/null +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/indice/IndiceSimpleWithScientifiquesIdDTO.java @@ -0,0 +1,25 @@ +package fr.iut.sciencequest.sae.dto.indice; + +import com.fasterxml.jackson.annotation.JsonInclude; +import fr.iut.sciencequest.sae.dto.scientifique.ScientifiqueIdOnlyDTO; +import jakarta.validation.Valid; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.*; +import org.springframework.hateoas.RepresentationModel; +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class IndiceSimpleWithScientifiquesIdDTO extends RepresentationModel { + @NotNull + private Integer id; + + @NotBlank + private String libelle; + + @NotNull + private ScientifiqueIdOnlyDTO scientifique; +} diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/indice/IndiceWithoutIdAndScientifiqueIdOnlyForPatchDTO.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/indice/IndiceWithoutIdAndScientifiqueIdOnlyForPatchDTO.java new file mode 100644 index 0000000..bb87905 --- /dev/null +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/indice/IndiceWithoutIdAndScientifiqueIdOnlyForPatchDTO.java @@ -0,0 +1,22 @@ +package fr.iut.sciencequest.sae.dto.indice; + +import com.fasterxml.jackson.annotation.JsonInclude; +import fr.iut.sciencequest.sae.dto.scientifique.ScientifiqueIdOnlyDTO; +import jakarta.validation.Valid; +import lombok.*; +import org.springframework.hateoas.RepresentationModel; + + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class IndiceWithoutIdAndScientifiqueIdOnlyForPatchDTO extends RepresentationModel { + + private String libelle; + + @Valid + private ScientifiqueIdOnlyDTO scientifique; +} diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/invite/InviteDTO.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/invite/InviteDTO.java index 67be490..2c050ab 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/invite/InviteDTO.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/invite/InviteDTO.java @@ -17,7 +17,7 @@ import org.springframework.hateoas.RepresentationModel; @JsonInclude(JsonInclude.Include.NON_NULL) public class InviteDTO extends RepresentationModel { @NotNull - private int id; + private Integer id; @NotBlank private String pseudo; diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/jeu/JeuDTO.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/jeu/JeuDTO.java index 2d42b54..d5fcc25 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/jeu/JeuDTO.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/jeu/JeuDTO.java @@ -17,11 +17,11 @@ import org.springframework.hateoas.RepresentationModel; @JsonInclude(JsonInclude.Include.NON_NULL) public class JeuDTO extends RepresentationModel { @NotNull - private int id; + private Integer id; @NotBlank private String nom; @Min(0) - private int nbrParties = 0; + private Integer nbrParties = 0; } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/joueur/JoueurDTO.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/joueur/JoueurDTO.java index 63b30db..c9bd493 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/joueur/JoueurDTO.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/joueur/JoueurDTO.java @@ -17,7 +17,7 @@ import org.springframework.hateoas.RepresentationModel; @JsonInclude(JsonInclude.Include.NON_NULL) public class JoueurDTO extends RepresentationModel { @NotNull - private int id; + private Integer id; @NotBlank private String pseudo; diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/partie/PartieDTO.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/partie/PartieDTO.java index 0587fc9..e34e3b2 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/partie/PartieDTO.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/partie/PartieDTO.java @@ -8,20 +8,21 @@ import jakarta.validation.constraints.NotNull; import lombok.*; import org.springframework.hateoas.RepresentationModel; +import java.util.List; + @Data @Builder @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(callSuper = false) -@JsonInclude(JsonInclude.Include.NON_NULL) public class PartieDTO extends RepresentationModel { @NotNull - private int id; + private Integer id; @NotEmpty private String codeInvitation; @NotEmpty - private Iterable joueurs; - @NotEmpty + private List joueurs; + @NotNull private JeuDTO jeu; } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/question/QuestionDTO.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/question/QuestionDTO.java index 1aa2307..890c803 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/question/QuestionDTO.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/question/QuestionDTO.java @@ -1,6 +1,7 @@ package fr.iut.sciencequest.sae.dto.question; import com.fasterxml.jackson.annotation.JsonInclude; +import com.fasterxml.jackson.annotation.JsonManagedReference; import fr.iut.sciencequest.sae.dto.reponse.ReponseDTO; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotEmpty; @@ -18,9 +19,10 @@ import org.springframework.hateoas.RepresentationModel; @JsonInclude(JsonInclude.Include.NON_NULL) public class QuestionDTO extends RepresentationModel { @NotNull - private int id; + private Integer id; @NotBlank private String question; + @NotEmpty private Iterable reponses; } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/reponse/ReponseDTO.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/reponse/ReponseDTO.java index bde6f6a..da360b2 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/reponse/ReponseDTO.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/reponse/ReponseDTO.java @@ -1,7 +1,9 @@ package fr.iut.sciencequest.sae.dto.reponse; import com.fasterxml.jackson.annotation.JsonInclude; +import fr.iut.sciencequest.sae.dto.question.QuestionDTO; import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.*; import org.springframework.hateoas.RepresentationModel; @@ -15,9 +17,12 @@ import org.springframework.hateoas.RepresentationModel; @JsonInclude(JsonInclude.Include.NON_NULL) public class ReponseDTO extends RepresentationModel { @NotNull - private int id; + private Integer id; @NotNull @NotBlank private String reponse; + + @NotEmpty + private QuestionDTO question; } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/scientifique/ScientifiqueDTO.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/scientifique/ScientifiqueDTO.java index 7a80663..222551b 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/scientifique/ScientifiqueDTO.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/scientifique/ScientifiqueDTO.java @@ -1,8 +1,10 @@ package fr.iut.sciencequest.sae.dto.scientifique; import com.fasterxml.jackson.annotation.JsonInclude; +import fr.iut.sciencequest.sae.dto.difficulte.DifficulteSimpleDTO; import fr.iut.sciencequest.sae.dto.thematique.ThematiqueDTO; import fr.iut.sciencequest.sae.dto.difficulte.DifficulteDTO; +import fr.iut.sciencequest.sae.dto.thematique.ThematiqueSimpleDTO; import fr.iut.sciencequest.sae.entities.Sexe; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotEmpty; @@ -21,16 +23,15 @@ import java.util.Date; @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(callSuper = false) -@JsonInclude(JsonInclude.Include.NON_NULL) public class ScientifiqueDTO extends RepresentationModel { @NotNull - private int id; + private Integer id; @NotNull - private DifficulteDTO difficulte; + private DifficulteSimpleDTO difficulte; @NotNull - private ThematiqueDTO thematique; + private ThematiqueSimpleDTO thematique; @URL private String pathToPhoto; diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/scientifique/ScientifiqueIdOnlyDTO.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/scientifique/ScientifiqueIdOnlyDTO.java new file mode 100644 index 0000000..1635304 --- /dev/null +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/scientifique/ScientifiqueIdOnlyDTO.java @@ -0,0 +1,18 @@ +package fr.iut.sciencequest.sae.dto.scientifique; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import lombok.*; +import org.springframework.hateoas.RepresentationModel; +import org.springframework.lang.NonNull; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = false) +public class ScientifiqueIdOnlyDTO extends RepresentationModel { + @NotNull + private Integer id; +} diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/thematique/ThematiqueDTO.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/thematique/ThematiqueDTO.java index 8b0e21c..6e9461b 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/thematique/ThematiqueDTO.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/thematique/ThematiqueDTO.java @@ -1,6 +1,6 @@ package fr.iut.sciencequest.sae.dto.thematique; -import com.fasterxml.jackson.annotation.JsonInclude; +import fr.iut.sciencequest.sae.entities.Scientifique; import jakarta.validation.constraints.NotBlank; import jakarta.validation.constraints.NotNull; import lombok.*; @@ -13,11 +13,12 @@ import org.springframework.hateoas.RepresentationModel; @NoArgsConstructor @AllArgsConstructor @EqualsAndHashCode(callSuper = false) -@JsonInclude(JsonInclude.Include.NON_NULL) public class ThematiqueDTO extends RepresentationModel { @NotNull - private int id; + private Integer id; @NotBlank private String libelle; + + private Iterable scientifiques; } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/thematique/ThematiqueSimpleDTO.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/thematique/ThematiqueSimpleDTO.java new file mode 100644 index 0000000..28172e0 --- /dev/null +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/thematique/ThematiqueSimpleDTO.java @@ -0,0 +1,21 @@ +package fr.iut.sciencequest.sae.dto.thematique; + +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.*; +import org.springframework.hateoas.RepresentationModel; + + + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = false) +public class ThematiqueSimpleDTO extends RepresentationModel { + @NotNull + private Integer id; + + @NotBlank + private String libelle; +} diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/utilisateur/UtilisateurDTO.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/utilisateur/UtilisateurDTO.java index a1e7d94..6813134 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/utilisateur/UtilisateurDTO.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/utilisateur/UtilisateurDTO.java @@ -9,7 +9,6 @@ import lombok.*; import org.springframework.hateoas.RepresentationModel; - @Data @Builder @NoArgsConstructor @@ -18,15 +17,12 @@ import org.springframework.hateoas.RepresentationModel; @JsonInclude(JsonInclude.Include.NON_NULL) public class UtilisateurDTO extends RepresentationModel { @NotNull - private int id; + private Integer id; @Email @NotNull private String email; - @NotBlank - private String motDePasse; - @NotBlank private String pseudo; diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/utilisateur/UtilisateurWithPasswordDTO.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/utilisateur/UtilisateurWithPasswordDTO.java new file mode 100644 index 0000000..8201309 --- /dev/null +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/utilisateur/UtilisateurWithPasswordDTO.java @@ -0,0 +1,34 @@ +package fr.iut.sciencequest.sae.dto.utilisateur; + +import com.fasterxml.jackson.annotation.JsonInclude; +import fr.iut.sciencequest.sae.dto.partie.PartieDTO; +import jakarta.validation.constraints.Email; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.*; +import org.springframework.hateoas.RepresentationModel; + + + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class UtilisateurWithPasswordDTO extends RepresentationModel { + @NotNull + private Integer id; + + @Email + @NotNull + private String email; + + @NotBlank + private String motDePasse; + + @NotBlank + private String pseudo; + + private PartieDTO partie; +} diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Admin.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Admin.java index 3fbcd5a..de071cc 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Admin.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Admin.java @@ -12,13 +12,12 @@ import lombok.NoArgsConstructor; @NoArgsConstructor @AllArgsConstructor @Data -@EqualsAndHashCode(callSuper = false) @Entity @Table(name="admin") -public class Admin extends BaseEntity { +public class Admin { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - private int id; + private Integer id; @Column(unique = true) private String email; diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/BaseEntity.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/BaseEntity.java deleted file mode 100644 index c5def33..0000000 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/BaseEntity.java +++ /dev/null @@ -1,12 +0,0 @@ -package fr.iut.sciencequest.sae.entities; - -import org.springframework.data.projection.ProjectionFactory; -import org.springframework.data.projection.SpelAwareProxyProjectionFactory; - -public abstract class BaseEntity implements IToProjection { - public T toProjection(Class projectionType){ - ProjectionFactory pf = new SpelAwareProxyProjectionFactory(); - return pf.createProjection(projectionType, this); - } - -} diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Difficulte.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Difficulte.java index e04637e..d02c584 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Difficulte.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Difficulte.java @@ -1,26 +1,37 @@ package fr.iut.sciencequest.sae.entities; +import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.annotation.JsonManagedReference; +import com.fasterxml.jackson.annotation.ObjectIdGenerators; import jakarta.persistence.*; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; -import org.modelmapper.internal.bytebuddy.implementation.bind.annotation.Super; +import org.hibernate.annotations.Fetch; +import org.hibernate.annotations.FetchMode; + +import java.util.List; @NoArgsConstructor @AllArgsConstructor @Data -@EqualsAndHashCode(callSuper = false) @Entity @Table(name="difficulte") -public class Difficulte extends BaseEntity { +@JsonIdentityInfo( + generator = ObjectIdGenerators.PropertyGenerator.class, + property = "id") +public class Difficulte { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - private int id; + private Integer id; @Column(unique = true) private String libelle; + + @JsonManagedReference + @OneToMany(mappedBy = "difficulte") + @Fetch(FetchMode.JOIN) + private List scientifiques; } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/IToProjection.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/IToProjection.java deleted file mode 100644 index 6ca06fe..0000000 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/IToProjection.java +++ /dev/null @@ -1,5 +0,0 @@ -package fr.iut.sciencequest.sae.entities; - -public interface IToProjection { - T toProjection(Class projectionType); -} 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 new file mode 100644 index 0000000..5c2a416 --- /dev/null +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Indice.java @@ -0,0 +1,26 @@ +package fr.iut.sciencequest.sae.entities; + +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.NoArgsConstructor; + +@NoArgsConstructor +@AllArgsConstructor +@Data +@Entity +@Table(name="indice") +public class Indice { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(nullable = false) + private String libelle; + + @ManyToOne + @JoinColumn(name="idscientifique", nullable = false) + private Scientifique scientifique; +} + diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Invite.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Invite.java index 5bb7fa1..b25f44e 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Invite.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Invite.java @@ -1,7 +1,6 @@ package fr.iut.sciencequest.sae.entities; -import fr.iut.sciencequest.sae.entities.joueur.Joueur; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Data; diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Jeu.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Jeu.java index 7f5500b..064ac70 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Jeu.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Jeu.java @@ -12,17 +12,16 @@ import lombok.NoArgsConstructor; @NoArgsConstructor @AllArgsConstructor @Data -@EqualsAndHashCode(callSuper = false) @Entity @Table(name="jeu") -public class Jeu extends BaseEntity { +public class Jeu { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - private int id; + private Integer id; @Column(unique = true) private String nom; @Column(name = "nbrparties") - private int nbrParties = 0; + private Integer nbrParties = 0; } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/joueur/Joueur.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Joueur.java similarity index 53% rename from SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/joueur/Joueur.java rename to SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Joueur.java index c1dc1c9..d5bf2fa 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/joueur/Joueur.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Joueur.java @@ -1,10 +1,6 @@ -package fr.iut.sciencequest.sae.entities.joueur; +package fr.iut.sciencequest.sae.entities; -import fr.iut.sciencequest.sae.entities.BaseEntity; -import fr.iut.sciencequest.sae.entities.Partie; import jakarta.persistence.*; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; @@ -13,19 +9,18 @@ import lombok.NoArgsConstructor; @AllArgsConstructor @NoArgsConstructor @Data -@EqualsAndHashCode(callSuper = false) @Inheritance ( strategy = InheritanceType.JOINED) @Entity @Table(name="joueur") -public abstract class Joueur extends BaseEntity { +public class Joueur { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - private int id; + private Integer id; @Column(unique = true) private String pseudo; @ManyToOne - @JoinColumn(name="idpartie") + @JoinColumn(name = "idpartie") private Partie partie; } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Partie.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Partie.java index 6546dbf..e6e7acb 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Partie.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Partie.java @@ -1,8 +1,6 @@ package fr.iut.sciencequest.sae.entities; -import fr.iut.sciencequest.sae.entities.joueur.Joueur; import jakarta.persistence.*; -import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; @@ -12,26 +10,24 @@ import org.hibernate.annotations.FetchMode; import java.util.List; -@EqualsAndHashCode(callSuper = true) @AllArgsConstructor @NoArgsConstructor @Data @Entity @Table(name="partie") -public class Partie extends BaseEntity { +public class Partie { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - private int id; + private Integer id; - @Column(name = "codeinvitation", unique = true) + @Column(name = "codeinvitation", unique = true, nullable = false) private String codeInvitation; - @OneToMany(mappedBy = "id") - @Fetch(FetchMode.JOIN) // Sinon crash (Could not write JSON: failed to lazily initialize a collection of role) + @OneToMany(mappedBy = "partie") + @Fetch(FetchMode.JOIN) // Sinon crash (Could not write JSON: failed to lazily initialize a collection of T) private List joueurs; - @NotNull @ManyToOne - @JoinColumn(name="idjeu") + @JoinColumn(name="idjeu", nullable = false) private Jeu jeu; } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Question.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Question.java index c9cd02e..d6c4e06 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Question.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Question.java @@ -1,4 +1,5 @@ package fr.iut.sciencequest.sae.entities; +import com.fasterxml.jackson.annotation.JsonManagedReference; import jakarta.persistence.*; import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; @@ -15,17 +16,17 @@ import java.util.List; @AllArgsConstructor @NoArgsConstructor @Data -@EqualsAndHashCode(callSuper = false) @Entity @Table(name="question") -public class Question extends BaseEntity { +public class Question { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - private int id; + private Integer id; private String question; - @OneToMany(mappedBy = "id") - @Fetch(FetchMode.JOIN) // Sinon crash (Could not write JSON: failed to lazily initialize a collection of role) + @JsonManagedReference + @OneToMany(mappedBy = "question") + @Fetch(FetchMode.JOIN) // Sinon crash (Could not write JSON: failed to lazily initialize a collection of T) private List reponses; } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Reponse.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Reponse.java index 320a414..3c2e169 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Reponse.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Reponse.java @@ -1,5 +1,6 @@ package fr.iut.sciencequest.sae.entities; +import com.fasterxml.jackson.annotation.JsonBackReference; import jakarta.persistence.*; import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; @@ -10,14 +11,17 @@ import lombok.NoArgsConstructor; @AllArgsConstructor @NoArgsConstructor @Data -@EqualsAndHashCode(callSuper = false) @Entity @Table(name="reponse") -public class Reponse extends BaseEntity { +public class Reponse{ @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - private int id; + private Integer id; private String reponse; + @JsonBackReference + @ManyToOne + @JoinColumn(name = "idquestion", nullable = false) + private Question question; } 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 new file mode 100644 index 0000000..a9bbfa2 --- /dev/null +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Scientifique.java @@ -0,0 +1,60 @@ +package fr.iut.sciencequest.sae.entities; + +import com.fasterxml.jackson.annotation.JsonBackReference; +import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.annotation.ObjectIdGenerators; +import jakarta.persistence.*; +import lombok.AllArgsConstructor; +import lombok.Data; +import lombok.EqualsAndHashCode; +import lombok.RequiredArgsConstructor; + +import java.math.BigDecimal; +import java.util.Date; + +@AllArgsConstructor +@RequiredArgsConstructor +//@Relation(collectionRelation = "scientifiques", itemRelation = "scientifique") +@Data +@Entity +@Table(name = "scientifique") +@JsonIdentityInfo( + generator = ObjectIdGenerators.PropertyGenerator.class, + property = "id") +public class Scientifique { + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @JsonBackReference + @ManyToOne + @JoinColumn(name="iddifficulte", nullable = false) + private Difficulte difficulte; + + @JsonBackReference + @ManyToOne + @JoinColumn(name="idthematique", nullable = false) + private Thematique thematique; + + @Column(name = "photo") + private String pathToPhoto; + + @Column(nullable = false) + private String nom; + + @Column(nullable = false) + private String prenom; + + @Column(nullable = false) + private String descriptif; + + @Column(name = "datenaissance", nullable = false) + private Date dateNaissance; + + @Column(nullable = false) + @Enumerated(EnumType.STRING) + private Sexe sexe; + + @Column(name = "ratiotrouvee") + private BigDecimal ratioTrouve = BigDecimal.ZERO; +} 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 08a0c63..4f011de 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 @@ -1,25 +1,38 @@ package fr.iut.sciencequest.sae.entities; +import com.fasterxml.jackson.annotation.JsonIdentityInfo; +import com.fasterxml.jackson.annotation.JsonManagedReference; +import com.fasterxml.jackson.annotation.ObjectIdGenerators; import jakarta.persistence.*; -import jakarta.validation.constraints.NotBlank; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; +import org.hibernate.annotations.Fetch; +import org.hibernate.annotations.FetchMode; + +import java.util.List; @NoArgsConstructor @AllArgsConstructor @Data -@EqualsAndHashCode(callSuper = false) @Entity @Table(name="thematique") -public class Thematique extends BaseEntity { +@JsonIdentityInfo( + generator = ObjectIdGenerators.PropertyGenerator.class, + property = "id") +public class Thematique { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) - private int id; + private Integer id; @Column(unique = true) private String libelle; + + @JsonManagedReference + @OneToMany(mappedBy = "thematique") + @Fetch(FetchMode.JOIN) + private List scientifiques; } 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 b51340f..dff7f2a 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 @@ -1,11 +1,7 @@ package fr.iut.sciencequest.sae.entities; -import fr.iut.sciencequest.sae.entities.joueur.Joueur; import jakarta.persistence.*; -import jakarta.validation.constraints.Email; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/indice/IIndiceidAndLibelleAndScientifiqueIdOnlyProjection.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/indice/IIndiceidAndLibelleAndScientifiqueIdOnlyProjection.java deleted file mode 100644 index 8a334af..0000000 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/indice/IIndiceidAndLibelleAndScientifiqueIdOnlyProjection.java +++ /dev/null @@ -1,10 +0,0 @@ -package fr.iut.sciencequest.sae.entities.indice; - -import fr.iut.sciencequest.sae.entities.scientifique.IScientifiqueIdOnlyProjection; - -public interface IIndiceidAndLibelleAndScientifiqueIdOnlyProjection { - int getId(); - String getLibelle(); - - IScientifiqueIdOnlyProjection getScientifique(); -} diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/indice/IValidateOnlyLibelle.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/indice/IValidateOnlyLibelle.java deleted file mode 100644 index dbcd65c..0000000 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/indice/IValidateOnlyLibelle.java +++ /dev/null @@ -1,3 +0,0 @@ -package fr.iut.sciencequest.sae.entities.indice; - -public interface IValidateOnlyLibelle {} diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/indice/Indice.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/indice/Indice.java deleted file mode 100644 index 70f7a65..0000000 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/indice/Indice.java +++ /dev/null @@ -1,37 +0,0 @@ -package fr.iut.sciencequest.sae.entities.indice; - -import fr.iut.sciencequest.sae.entities.BaseEntity; -import fr.iut.sciencequest.sae.entities.scientifique.Scientifique; -import jakarta.persistence.*; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.NoArgsConstructor; - -@NoArgsConstructor -@AllArgsConstructor -@Data -@EqualsAndHashCode(callSuper = false) -@Entity -@Table(name="indice") -public class Indice extends BaseEntity { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private int id; - - @NotBlank(groups = {IValidateOnlyLibelle.class}) - private String libelle; - - @ManyToOne - @NotNull - @JoinColumn(name="idscientifique", nullable = false) - private Scientifique scientifique; - - public Indice(int id, String libelle) { // Used for projection - this.id = id; - this.libelle = libelle; - } -} - diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/joueur/IIdAndPseudoOnlyProjection.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/joueur/IIdAndPseudoOnlyProjection.java deleted file mode 100644 index f07117e..0000000 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/joueur/IIdAndPseudoOnlyProjection.java +++ /dev/null @@ -1,6 +0,0 @@ -package fr.iut.sciencequest.sae.entities.joueur; - -public interface IIdAndPseudoOnlyProjection { - int getId(); - String getPseudo(); -} diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/scientifique/IScientifiqueIdOnlyProjection.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/scientifique/IScientifiqueIdOnlyProjection.java deleted file mode 100644 index 892b5a9..0000000 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/scientifique/IScientifiqueIdOnlyProjection.java +++ /dev/null @@ -1,5 +0,0 @@ -package fr.iut.sciencequest.sae.entities.scientifique; - -public interface IScientifiqueIdOnlyProjection { - int getId(); -} diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/scientifique/Scientifique.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/scientifique/Scientifique.java deleted file mode 100644 index 7b2059e..0000000 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/scientifique/Scientifique.java +++ /dev/null @@ -1,58 +0,0 @@ -package fr.iut.sciencequest.sae.entities.scientifique; - -import fr.iut.sciencequest.sae.entities.BaseEntity; -import fr.iut.sciencequest.sae.entities.Difficulte; -import fr.iut.sciencequest.sae.entities.Sexe; -import fr.iut.sciencequest.sae.entities.Thematique; -import jakarta.persistence.*; -import jakarta.validation.constraints.NotBlank; -import jakarta.validation.constraints.NotNull; -import jakarta.validation.constraints.Size; -import lombok.AllArgsConstructor; -import lombok.Data; -import lombok.EqualsAndHashCode; -import lombok.RequiredArgsConstructor; -import org.hibernate.validator.constraints.URL; -import org.springframework.hateoas.server.core.Relation; - -import java.math.BigDecimal; -import java.util.Date; - -@AllArgsConstructor -@RequiredArgsConstructor -@Relation(collectionRelation = "scientifiques", itemRelation = "scientifique") -@Data -@EqualsAndHashCode(callSuper = false) -@Entity -@Table(name = "scientifique") -public class Scientifique extends BaseEntity { - @Id - @GeneratedValue(strategy = GenerationType.IDENTITY) - private int id; - - @ManyToOne - @JoinColumn(name="iddifficulte") - private Difficulte difficulte; - - @ManyToOne - @JoinColumn(name="idthematique") - private Thematique thematique; - - @Column(name = "photo") - private String pathToPhoto; - - private String nom; - - private String prenom; - - private String descriptif; - - @Column(name = "datenaissance") - private Date dateNaissance; - - @Enumerated(EnumType.STRING) - private Sexe sexe; - - @Column(name = "ratiotrouvee") - private BigDecimal ratioTrouve = BigDecimal.ZERO; -} 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 new file mode 100644 index 0000000..2cb0d5d --- /dev/null +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/ValidationHandler.java @@ -0,0 +1,34 @@ +package fr.iut.sciencequest.sae.exceptions; + +import java.util.HashMap; +import java.util.Map; + +import org.springframework.http.HttpHeaders; +import org.springframework.http.HttpStatus; +import org.springframework.http.ResponseEntity; +import org.springframework.validation.FieldError; +import org.springframework.web.bind.MethodArgumentNotValidException; +import org.springframework.web.bind.annotation.ControllerAdvice; +import org.springframework.web.bind.annotation.ExceptionHandler; +import org.springframework.web.bind.annotation.ResponseStatus; +import org.springframework.web.context.request.WebRequest; +import org.springframework.web.servlet.mvc.method.annotation.ResponseEntityExceptionHandler; + +@ControllerAdvice +public class ValidationHandler extends ResponseEntityExceptionHandler { + + + @ExceptionHandler(MethodArgumentNotValidException.class) + @ResponseStatus(HttpStatus.BAD_REQUEST) + protected ResponseEntity hand(MethodArgumentNotValidException ex) { + + Map errors = new HashMap<>(); + ex.getBindingResult().getAllErrors().forEach((error) ->{ + + String fieldName = ((FieldError) error).getField(); + String message = error.getDefaultMessage(); + errors.put(fieldName, message); + }); + return new ResponseEntity(errors, HttpStatus.BAD_REQUEST); + } +} diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/notFound/DifficulteNotFoundException.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/notFound/DifficulteNotFoundException.java new file mode 100644 index 0000000..b3d1995 --- /dev/null +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/notFound/DifficulteNotFoundException.java @@ -0,0 +1,7 @@ +package fr.iut.sciencequest.sae.exceptions.notFound; + +public class DifficulteNotFoundException extends EntityNotFoundException{ + public DifficulteNotFoundException(int id) { + super("Difficulté", id); + } +} diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/notFound/ThematiqueNotFoundException.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/notFound/ThematiqueNotFoundException.java index f909cc5..61b5a7e 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/notFound/ThematiqueNotFoundException.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/notFound/ThematiqueNotFoundException.java @@ -2,6 +2,6 @@ package fr.iut.sciencequest.sae.exceptions.notFound; public class ThematiqueNotFoundException extends EntityNotFoundException{ public ThematiqueNotFoundException(int id) { - super("thématique", id); + super("Thématique", id); } } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/DifficulteRepository.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/DifficulteRepository.java index e4834ad..38d5a58 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/DifficulteRepository.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/DifficulteRepository.java @@ -6,4 +6,6 @@ import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Repository; @Repository -public interface DifficulteRepository extends JpaRepository {} \ No newline at end of file +public interface DifficulteRepository extends JpaRepository { + Difficulte findDifficulteByLibelleEqualsIgnoreCase(String libelle); +} \ No newline at end of file diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/IndiceRepository.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/IndiceRepository.java index 08569c3..afdbab1 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/IndiceRepository.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/IndiceRepository.java @@ -1,6 +1,6 @@ package fr.iut.sciencequest.sae.repositories; -import fr.iut.sciencequest.sae.entities.indice.Indice; +import fr.iut.sciencequest.sae.entities.Indice; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.stereotype.Repository; @@ -11,4 +11,6 @@ public interface IndiceRepository extends PagingAndSortingRepository findByScientifiqueId(int id); + + Indice getById(int id); } \ No newline at end of file diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/JoueurRepository.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/JoueurRepository.java index e9b7066..61ae108 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/JoueurRepository.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/JoueurRepository.java @@ -1,6 +1,6 @@ package fr.iut.sciencequest.sae.repositories; -import fr.iut.sciencequest.sae.entities.joueur.Joueur; +import fr.iut.sciencequest.sae.entities.Joueur; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Repository; diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/ScientifiqueRepository.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/ScientifiqueRepository.java index 34bc028..57f350b 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/ScientifiqueRepository.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/ScientifiqueRepository.java @@ -1,10 +1,19 @@ package fr.iut.sciencequest.sae.repositories; -import fr.iut.sciencequest.sae.entities.scientifique.Scientifique; +import fr.iut.sciencequest.sae.entities.Difficulte; +import fr.iut.sciencequest.sae.entities.Scientifique; +import fr.iut.sciencequest.sae.entities.Thematique; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.stereotype.Repository; @Repository -public interface ScientifiqueRepository extends PagingAndSortingRepository, CrudRepository { +public interface ScientifiqueRepository extends JpaRepository { + Page findAllByDifficulteEquals(Difficulte difficulte, Pageable pageable); + Page findAllByThematiqueEquals(Thematique thematique, Pageable pageable); + Page findAllByThematiqueEqualsAndDifficulteEquals(Thematique thematique, Difficulte difficulte, Pageable pageable); + } 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 6695693..accfefe 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 @@ -8,4 +8,5 @@ import org.springframework.stereotype.Repository; @Repository public interface ThematiqueRepository extends CrudRepository { 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 978f6f0..7c4e9b9 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 @@ -1,7 +1,6 @@ package fr.iut.sciencequest.sae.services; -import fr.iut.sciencequest.sae.entities.indice.IIndiceidAndLibelleAndScientifiqueIdOnlyProjection; -import fr.iut.sciencequest.sae.entities.indice.Indice; +import fr.iut.sciencequest.sae.entities.Indice; import fr.iut.sciencequest.sae.exceptions.DuplicatedIdException; import fr.iut.sciencequest.sae.exceptions.notFound.IndiceNotFoundException; import fr.iut.sciencequest.sae.repositories.IndiceRepository; @@ -18,8 +17,8 @@ public class IndiceService implements IIndiceService { } @Override - public Iterable findByScientifiqueId(int id) { - return this.indiceRepository.findByScientifiqueId(id, IIndiceidAndLibelleAndScientifiqueIdOnlyProjection.class); + public Iterable findByScientifiqueId(int id) { + return this.indiceRepository.findByScientifiqueId(id); } @Override diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/ScientifiqueService.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/ScientifiqueService.java index 8a79fb2..1ee8818 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/ScientifiqueService.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/ScientifiqueService.java @@ -1,27 +1,32 @@ package fr.iut.sciencequest.sae.services; -import fr.iut.sciencequest.sae.entities.scientifique.Scientifique; -import fr.iut.sciencequest.sae.entities.indice.IIndiceidAndLibelleAndScientifiqueIdOnlyProjection; +import fr.iut.sciencequest.sae.entities.Difficulte; +import fr.iut.sciencequest.sae.entities.Scientifique; +import fr.iut.sciencequest.sae.entities.Indice; +import fr.iut.sciencequest.sae.entities.Thematique; +import fr.iut.sciencequest.sae.exceptions.notFound.DifficulteNotFoundException; import fr.iut.sciencequest.sae.exceptions.notFound.ScientifiqueNotFoundException; +import fr.iut.sciencequest.sae.exceptions.notFound.ThematiqueNotFoundException; +import fr.iut.sciencequest.sae.repositories.DifficulteRepository; import fr.iut.sciencequest.sae.repositories.ScientifiqueRepository; +import fr.iut.sciencequest.sae.repositories.ThematiqueRepository; import fr.iut.sciencequest.sae.services.interfaces.IScientifiqueService; +import lombok.AllArgsConstructor; import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; +import java.util.NoSuchElementException; +import java.util.Optional; + +@AllArgsConstructor @Service public class ScientifiqueService implements IScientifiqueService { - - private static final int PAGE_SIZE = 1; - private final ScientifiqueRepository scientifiqueRepository; + private final ThematiqueRepository thematiqueRepository; + private final DifficulteRepository difficulteRepository; private final IndiceService indiceService; - public ScientifiqueService(ScientifiqueRepository scientifiqueRepository, IndiceService indiceService) { - this.scientifiqueRepository = scientifiqueRepository; - this.indiceService = indiceService; - } @Override public Scientifique update(Scientifique scientifique) { @@ -35,6 +40,25 @@ public class ScientifiqueService implements IScientifiqueService { @Override public Page findAll(Pageable page) { + + return scientifiqueRepository.findAll(page); + } + + public Page findAllWithCriteria(Pageable page, Integer tId, Integer dId) { + Thematique thematique = null; + Difficulte difficulte = null; + + if (tId != -1) thematique = thematiqueRepository.findById(tId).orElseThrow(() -> new ThematiqueNotFoundException(tId)); + if (dId != -1) difficulte = difficulteRepository.findById(dId).orElseThrow(() -> new DifficulteNotFoundException(dId)); + + if (thematique != null && difficulte != null) { + return scientifiqueRepository.findAllByThematiqueEqualsAndDifficulteEquals(thematique, difficulte, page); + } else if (thematique != null) { + return scientifiqueRepository.findAllByThematiqueEquals(thematique, page); + } else if (difficulte != null) { + return scientifiqueRepository.findAllByDifficulteEquals(difficulte, page); + } + return scientifiqueRepository.findAll(page); } @@ -44,7 +68,7 @@ public class ScientifiqueService implements IScientifiqueService { } @Override - public Iterable getLinkedIndicesByScientifiqueId(int id){ + public Iterable getLinkedIndicesByScientifiqueId(int id){ if(!this.scientifiqueRepository.existsById(id)){ throw new ScientifiqueNotFoundException(id); } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/interfaces/IIndiceService.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/interfaces/IIndiceService.java index 8a6e3ca..db198ae 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/interfaces/IIndiceService.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/interfaces/IIndiceService.java @@ -1,10 +1,9 @@ package fr.iut.sciencequest.sae.services.interfaces; -import fr.iut.sciencequest.sae.entities.indice.IIndiceidAndLibelleAndScientifiqueIdOnlyProjection; -import fr.iut.sciencequest.sae.entities.indice.Indice; +import fr.iut.sciencequest.sae.entities.Indice; public interface IIndiceService { - Iterable findByScientifiqueId(int id); + Iterable findByScientifiqueId(int id); Indice update(Indice indice); Indice create(Indice indice); } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/interfaces/IScientifiqueService.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/interfaces/IScientifiqueService.java index 8d96590..1930981 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/interfaces/IScientifiqueService.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/interfaces/IScientifiqueService.java @@ -1,7 +1,7 @@ package fr.iut.sciencequest.sae.services.interfaces; -import fr.iut.sciencequest.sae.entities.scientifique.Scientifique; -import fr.iut.sciencequest.sae.entities.indice.IIndiceidAndLibelleAndScientifiqueIdOnlyProjection; +import fr.iut.sciencequest.sae.entities.Indice; +import fr.iut.sciencequest.sae.entities.Scientifique; import org.springframework.data.domain.Page; import org.springframework.data.domain.Pageable; @@ -11,8 +11,9 @@ public interface IScientifiqueService { Scientifique create(Scientifique scientifique); Page findAll(Pageable page); + Page findAllWithCriteria(Pageable page, Integer tId, Integer dId); Scientifique findById(int id); - Iterable getLinkedIndicesByScientifiqueId(int id); + Iterable getLinkedIndicesByScientifiqueId(int id); }