From a2fe781a96e0e50fc1ce720c06c48ce50c17a5bf Mon Sep 17 00:00:00 2001 From: visoulier Date: Thu, 29 Feb 2024 17:03:36 +0100 Subject: [PATCH] =?UTF-8?q?jour=204=20--=20apr=C3=A8s-midi?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- SpringBootProject/pom.xml | 5 ++ .../sciencequest/sae/ApplicationConfig.java | 3 +- .../sciencequest/sae/ApplicationFilter.java | 9 ++-- .../iut/sciencequest/sae/SaeApplication.java | 8 ++- .../sae/assemblers/PartieModelAssembler.java | 24 +++++++++ .../assemblers/QuestionModelAssembler.java | 21 ++++---- .../ScientifiqueModelAssembler.java | 24 +++++++++ .../sae/controllers/Controller.java | 2 - .../sae/controllers/DifficulteController.java | 5 -- .../sae/controllers/PartieController.java | 32 ++++++----- .../sae/controllers/QuestionController.java | 22 ++++---- .../controllers/ScientifiqueController.java | 29 ++++++---- .../QuestionModel.java => dto/IndiceDTO.java} | 9 ++-- .../iut/sciencequest/sae/dto/JoueurDTO.java | 29 ++++++++++ .../iut/sciencequest/sae/dto/PartieDTO.java | 27 ++++++++++ .../iut/sciencequest/sae/dto/QuestionDTO.java | 27 ++++++++++ .../sciencequest/sae/dto/ScientifiqueDTO.java | 54 +++++++++++++++++++ .../iut/sciencequest/sae/entities/Admin.java | 2 + .../sciencequest/sae/entities/Difficulte.java | 3 ++ .../sae/entities/IToProjection.java | 2 +- .../iut/sciencequest/sae/entities/Invite.java | 2 + .../fr/iut/sciencequest/sae/entities/Jeu.java | 8 +-- .../iut/sciencequest/sae/entities/Partie.java | 26 +++++---- .../sciencequest/sae/entities/Question.java | 4 +- .../sciencequest/sae/entities/Reponse.java | 2 + .../sciencequest/sae/entities/Thematique.java | 2 + .../sae/entities/Utilisateur.java | 4 +- .../sae/entities/indice/Indice.java | 2 + .../joueur/IIdAndPseudoOnlyProjection.java | 6 +++ .../sae/entities/{ => joueur}/Joueur.java | 13 +++-- .../entities/scientifique/Scientifique.java | 13 +---- .../sae/repositories/IndiceRepository.java | 2 - .../sae/repositories/JoueurRepository.java | 2 +- .../sae/repositories/QuestionRepository.java | 4 -- .../repositories/ThematiqueRepository.java | 2 +- .../sae/services/PartieService.java | 23 +++++++- .../sae/services/QuestionService.java | 2 - .../sae/services/ScientifiqueService.java | 7 +-- .../services/interfaces/IPartieService.java | 5 +- .../interfaces/IScientifiqueService.java | 3 +- .../src/main/resources/schema.sql | 13 +++-- 41 files changed, 360 insertions(+), 122 deletions(-) create mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/PartieModelAssembler.java create mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/ScientifiqueModelAssembler.java rename SpringBootProject/src/main/java/fr/iut/sciencequest/sae/{models/QuestionModel.java => dto/IndiceDTO.java} (65%) create mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/JoueurDTO.java create mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/PartieDTO.java create mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/QuestionDTO.java create mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/ScientifiqueDTO.java create mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/joueur/IIdAndPseudoOnlyProjection.java rename SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/{ => joueur}/Joueur.java (64%) diff --git a/SpringBootProject/pom.xml b/SpringBootProject/pom.xml index 9a56cb5..8045cf4 100644 --- a/SpringBootProject/pom.xml +++ b/SpringBootProject/pom.xml @@ -50,6 +50,11 @@ org.springframework.boot spring-boot-starter-hateoas + + org.modelmapper + modelmapper + 3.2.0 + diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/ApplicationConfig.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/ApplicationConfig.java index 947c44c..fa494fe 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/ApplicationConfig.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/ApplicationConfig.java @@ -4,13 +4,14 @@ import org.springframework.context.annotation.Configuration; import org.springframework.http.MediaType; import org.springframework.web.accept.FixedContentNegotiationStrategy; import org.springframework.web.servlet.config.annotation.ContentNegotiationConfigurer; -import org.springframework.web.servlet.config.annotation.WebMvcConfigurationSupport; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; import java.util.List; @Configuration public class ApplicationConfig implements WebMvcConfigurer { + public static final int DEFAULT_PAGEABLE_SIZE = 1; + // Permet de forcer l'affichage des erreurs en JSON sans prendre en compte les headers du client @Override public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/ApplicationFilter.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/ApplicationFilter.java index df7c8a3..be17cff 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/ApplicationFilter.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/ApplicationFilter.java @@ -7,18 +7,16 @@ import com.fasterxml.jackson.databind.node.ArrayNode; import com.fasterxml.jackson.databind.node.ObjectNode; import jakarta.servlet.FilterChain; import jakarta.servlet.ServletException; -import jakarta.servlet.ServletOutputStream; -import jakarta.servlet.WriteListener; import jakarta.servlet.http.HttpServletRequest; import jakarta.servlet.http.HttpServletResponse; -import jakarta.servlet.http.HttpServletResponseWrapper; import org.springframework.core.annotation.Order; import org.springframework.http.MediaType; +import org.springframework.lang.NonNull; +import org.springframework.lang.Nullable; import org.springframework.stereotype.Component; import org.springframework.web.filter.OncePerRequestFilter; import org.springframework.web.util.ContentCachingResponseWrapper; -import java.io.ByteArrayOutputStream; import java.io.IOException; import java.nio.charset.StandardCharsets; @@ -32,7 +30,8 @@ public class ApplicationFilter extends OncePerRequestFilter { } @Override - protected void doFilterInternal(HttpServletRequest request, HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { + @NonNull + protected void doFilterInternal(@Nullable HttpServletRequest request, @Nullable HttpServletResponse response, FilterChain filterChain) throws ServletException, IOException { // Intercept and modify the JSON response ContentCachingResponseWrapper responseWrapper = new ContentCachingResponseWrapper(response); diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/SaeApplication.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/SaeApplication.java index 01bc582..2595cdf 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/SaeApplication.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/SaeApplication.java @@ -3,6 +3,8 @@ package fr.iut.sciencequest.sae; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; import org.springframework.context.annotation.Bean; +import org.springframework.lang.NonNull; +import org.springframework.lang.Nullable; import org.springframework.web.servlet.config.annotation.CorsRegistry; import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @@ -12,8 +14,10 @@ public class SaeApplication { public WebMvcConfigurer corsConfigurer() { return new WebMvcConfigurer() { @Override - public void addCorsMappings(CorsRegistry registry) { - registry.addMapping("/**").allowedOrigins("*"); + @NonNull + public void addCorsMappings(@Nullable CorsRegistry registry) { + assert registry != null; + registry.addMapping("/**").allowedOrigins("*"); } }; } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/PartieModelAssembler.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/PartieModelAssembler.java new file mode 100644 index 0000000..5828adf --- /dev/null +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/PartieModelAssembler.java @@ -0,0 +1,24 @@ +package fr.iut.sciencequest.sae.assemblers; + +import fr.iut.sciencequest.sae.controllers.PartieController; +import fr.iut.sciencequest.sae.entities.Partie; +import fr.iut.sciencequest.sae.dto.PartieDTO; +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 PartieModelAssembler extends RepresentationModelAssemblerSupport { + public PartieModelAssembler() { + super(PartieController.class, PartieDTO.class); + } + + @Override + @NonNull + public PartieDTO toModel(@Nullable Partie entity) { + ModelMapper mapper = new ModelMapper(); + return mapper.map(entity, PartieDTO.class); + } +} diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/QuestionModelAssembler.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/QuestionModelAssembler.java index 88ddd90..11677da 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/QuestionModelAssembler.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/QuestionModelAssembler.java @@ -2,25 +2,24 @@ package fr.iut.sciencequest.sae.assemblers; import fr.iut.sciencequest.sae.controllers.QuestionController; import fr.iut.sciencequest.sae.entities.Question; -import fr.iut.sciencequest.sae.models.QuestionModel; +import fr.iut.sciencequest.sae.dto.QuestionDTO; +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 QuestionModelAssembler extends RepresentationModelAssemblerSupport { +public class QuestionModelAssembler extends RepresentationModelAssemblerSupport { public QuestionModelAssembler() { - super(QuestionController.class, QuestionModel.class); + super(QuestionController.class, QuestionDTO.class); } @Override - public QuestionModel toModel(Question entity) { - QuestionModel questionModel = instantiateModel(entity); - - questionModel.setQuestion(entity.getQuestion()); - questionModel.setId(entity.getId()); - questionModel.setReponses(entity.getReponses()); - - return questionModel; + @NonNull + public QuestionDTO toModel(@Nullable Question entity) { + ModelMapper mapper = new ModelMapper(); + return mapper.map(entity, QuestionDTO.class); } } 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 new file mode 100644 index 0000000..9fd4c7b --- /dev/null +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/ScientifiqueModelAssembler.java @@ -0,0 +1,24 @@ +package fr.iut.sciencequest.sae.assemblers; + +import fr.iut.sciencequest.sae.controllers.ScientifiqueController; +import fr.iut.sciencequest.sae.dto.ScientifiqueDTO; +import fr.iut.sciencequest.sae.entities.scientifique.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; + +@Component +public class ScientifiqueModelAssembler extends RepresentationModelAssemblerSupport { + public ScientifiqueModelAssembler() { + super(ScientifiqueController.class, ScientifiqueDTO.class); + } + + @Override + @NonNull + public ScientifiqueDTO toModel(@Nullable Scientifique entity) { + ModelMapper mapper = new ModelMapper(); + return mapper.map(entity, ScientifiqueDTO.class); + } +} diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/Controller.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/Controller.java index e608fe9..4315901 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/Controller.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/Controller.java @@ -8,9 +8,7 @@ import org.springframework.hateoas.Link; import java.lang.reflect.Method; import java.util.ArrayList; -import java.util.Arrays; import java.util.List; -import java.util.Optional; import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/DifficulteController.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/DifficulteController.java index 3ce193b..27bd7a4 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/DifficulteController.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/DifficulteController.java @@ -4,8 +4,6 @@ package fr.iut.sciencequest.sae.controllers; import fr.iut.sciencequest.sae.entities.Difficulte; import fr.iut.sciencequest.sae.services.DifficulteService; import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; -import org.springframework.hateoas.Link; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.GetMapping; @@ -13,9 +11,6 @@ import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.ResponseStatus; import org.springframework.web.bind.annotation.RestController; -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.methodOn; - @RestController @RequestMapping("/api/v1/difficultes") 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 e89f0ed..63f5fc6 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 @@ -1,11 +1,19 @@ package fr.iut.sciencequest.sae.controllers; +import fr.iut.sciencequest.sae.assemblers.PartieModelAssembler; +import fr.iut.sciencequest.sae.assemblers.QuestionModelAssembler; +import fr.iut.sciencequest.sae.dto.PartieDTO; import fr.iut.sciencequest.sae.entities.Partie; +import fr.iut.sciencequest.sae.entities.Question; import fr.iut.sciencequest.sae.exceptions.DuplicatedFieldException; import fr.iut.sciencequest.sae.exceptions.notFound.PartieNotFoundException; import fr.iut.sciencequest.sae.repositories.PartieRepository; +import fr.iut.sciencequest.sae.services.PartieService; +import fr.iut.sciencequest.sae.services.QuestionService; import jakarta.servlet.http.HttpServletRequest; +import lombok.AllArgsConstructor; import org.springframework.dao.DataIntegrityViolationException; +import org.springframework.data.web.PagedResourcesAssembler; import org.springframework.hateoas.EntityModel; import org.springframework.hateoas.Link; import org.springframework.http.HttpStatus; @@ -16,25 +24,21 @@ import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*; import java.util.Optional; @RestController +@AllArgsConstructor @RequestMapping("/api/v1/partie") public class PartieController extends Controller { - private final PartieRepository partieRepository; - - public PartieController(PartieRepository partieRepository) { - this.partieRepository = partieRepository; - } + private final PartieModelAssembler partieModelAssembler; + @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection") + private final PagedResourcesAssembler pagedResourcesAssembler; + private final PartieService partieService; @RequestMapping(value = "/{id}",method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) - public EntityModel> getPartie(@PathVariable int id, HttpServletRequest request) { - Optional partieOptional = this.partieRepository.findById(id); - Partie partie = partieOptional.orElseThrow(() -> - new PartieNotFoundException("Partie", id) - ); - - Link selfLink = linkTo(methodOn(PartieController.class).getPartie(id,request)).withSelfRel(); - return EntityModel.of(Optional.ofNullable(partie), selfLink); + public PartieDTO getPartie(@PathVariable int id) { + Partie partie = this.partieService.findById(id); + return partieModelAssembler.toModel(partie); } + /* @RequestMapping(method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseStatus(HttpStatus.CREATED) public Partie createPartie(@RequestBody Partie partie) { @@ -43,7 +47,7 @@ public class PartieController extends Controller { } catch (DataIntegrityViolationException e) { throw new DuplicatedFieldException("ERREUR : il existe déjà une partie : " + partie.getId() + " en base"); } - } + }*/ } 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 9d15eb9..c53310b 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 @@ -1,36 +1,32 @@ package fr.iut.sciencequest.sae.controllers; +import fr.iut.sciencequest.sae.ApplicationConfig; import fr.iut.sciencequest.sae.assemblers.QuestionModelAssembler; import fr.iut.sciencequest.sae.entities.Question; import fr.iut.sciencequest.sae.exceptions.IncorrectPageException; -import fr.iut.sciencequest.sae.models.QuestionModel; +import fr.iut.sciencequest.sae.dto.QuestionDTO; import fr.iut.sciencequest.sae.services.QuestionService; -import org.springframework.beans.factory.annotation.Autowired; +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.PagedModel; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; @RestController +@AllArgsConstructor @RequestMapping("/api/v1/questions") public class QuestionController extends Controller { private final QuestionService questionService; - - @Autowired - private QuestionModelAssembler questionModelAssembler; - - @Autowired - private PagedResourcesAssembler pagedResourcesAssembler; - - public QuestionController(QuestionService questionService) { - this.questionService = questionService; - } + private final QuestionModelAssembler questionModelAssembler; + @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection") + private final PagedResourcesAssembler pagedResourcesAssembler; @RequestMapping(method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody - public PagedModel getAllQuestions(Pageable p) { + public PagedModel getAllQuestions(@PageableDefault(size = ApplicationConfig.DEFAULT_PAGEABLE_SIZE) Pageable p) { try { Page questionPage = questionService.findAll(p); return pagedResourcesAssembler.toModel(questionPage, questionModelAssembler); 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 b93a496..ce99b69 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,5 +1,11 @@ package fr.iut.sciencequest.sae.controllers; +import fr.iut.sciencequest.sae.ApplicationConfig; +import fr.iut.sciencequest.sae.assemblers.QuestionModelAssembler; +import fr.iut.sciencequest.sae.assemblers.ScientifiqueModelAssembler; +import fr.iut.sciencequest.sae.dto.QuestionDTO; +import fr.iut.sciencequest.sae.dto.ScientifiqueDTO; +import fr.iut.sciencequest.sae.entities.Question; import fr.iut.sciencequest.sae.entities.scientifique.Scientifique; import fr.iut.sciencequest.sae.entities.indice.IIndiceidAndLibelleAndScientifiqueIdOnlyProjection; import fr.iut.sciencequest.sae.entities.indice.Indice; @@ -7,10 +13,14 @@ import fr.iut.sciencequest.sae.entities.indice.IValidateOnlyLibelle; import fr.iut.sciencequest.sae.exceptions.IncorrectPageException; import fr.iut.sciencequest.sae.services.IndiceService; import fr.iut.sciencequest.sae.services.interfaces.IScientifiqueService; -import org.springframework.data.projection.ProjectionFactory; -import org.springframework.data.projection.SpelAwareProxyProjectionFactory; +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.validation.annotation.Validated; @@ -18,24 +28,21 @@ import org.springframework.web.bind.annotation.*; import java.util.Optional; -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; - @RestController +@AllArgsConstructor @RequestMapping("/api/v1/scientifiques") public class ScientifiqueController extends Controller { private final IScientifiqueService scientifiqueService; + private final ScientifiqueModelAssembler scientifiqueModelAssembler; + @SuppressWarnings("SpringJavaInjectionPointsAutowiringInspection") + private final PagedResourcesAssembler pagedResourcesAssembler; private final IndiceService indiceService; - public ScientifiqueController(IScientifiqueService scientifiqueService, IndiceService indiceService) { - this.scientifiqueService = scientifiqueService; - this.indiceService = indiceService; - } - @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) - public CollectionModel> getAllScientists(@RequestParam(name = "page") Optional page) { + public PagedModel getAllScientists(@PageableDefault(size = ApplicationConfig.DEFAULT_PAGEABLE_SIZE) Pageable p) { try { - return getPageableCollectionModel(this.scientifiqueService.findAll(page.orElse(0)), page.orElse(0),"getAllScientists"); + return pagedResourcesAssembler.toModel(this.scientifiqueService.findAll(p), scientifiqueModelAssembler); } catch (IllegalArgumentException e) { throw new IncorrectPageException("numéro de page incorrect"); } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/models/QuestionModel.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/IndiceDTO.java similarity index 65% rename from SpringBootProject/src/main/java/fr/iut/sciencequest/sae/models/QuestionModel.java rename to SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/IndiceDTO.java index 829b54c..66b0856 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/models/QuestionModel.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/IndiceDTO.java @@ -1,10 +1,11 @@ -package fr.iut.sciencequest.sae.models; +package fr.iut.sciencequest.sae.dto; import com.fasterxml.jackson.annotation.JsonInclude; import fr.iut.sciencequest.sae.entities.Reponse; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; import lombok.*; import org.springframework.hateoas.RepresentationModel; -import org.springframework.hateoas.server.core.Relation; import java.util.List; @@ -15,8 +16,10 @@ import java.util.List; @AllArgsConstructor @EqualsAndHashCode(callSuper = false) @JsonInclude(JsonInclude.Include.NON_NULL) -public class QuestionModel extends RepresentationModel { +public class IndiceDTO extends RepresentationModel { + @NotNull private int id; private String question; + @NotEmpty private List reponses; } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/JoueurDTO.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/JoueurDTO.java new file mode 100644 index 0000000..7b7f2fb --- /dev/null +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/JoueurDTO.java @@ -0,0 +1,29 @@ +package fr.iut.sciencequest.sae.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; +import fr.iut.sciencequest.sae.entities.Partie; +import fr.iut.sciencequest.sae.entities.Reponse; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +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 JoueurDTO extends RepresentationModel { + @NotNull + private int id; + + @NotBlank + private String pseudo; + + private Partie partie; +} diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/PartieDTO.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/PartieDTO.java new file mode 100644 index 0000000..33b4b70 --- /dev/null +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/PartieDTO.java @@ -0,0 +1,27 @@ +package fr.iut.sciencequest.sae.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; +import fr.iut.sciencequest.sae.entities.Jeu; +import fr.iut.sciencequest.sae.entities.joueur.Joueur; +import jakarta.validation.constraints.NotEmpty; +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 PartieDTO extends RepresentationModel { + @NotNull + private int id; + @NotEmpty + private String codeInvitation; + @NotEmpty + private Iterable joueurs; + @NotEmpty + private Jeu jeu; +} diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/QuestionDTO.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/QuestionDTO.java new file mode 100644 index 0000000..89c99e8 --- /dev/null +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/QuestionDTO.java @@ -0,0 +1,27 @@ +package fr.iut.sciencequest.sae.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; +import fr.iut.sciencequest.sae.entities.Reponse; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +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 QuestionDTO extends RepresentationModel { + @NotNull + private int id; + @NotBlank + private String question; + @NotEmpty + private Iterable reponses; +} diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/ScientifiqueDTO.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/ScientifiqueDTO.java new file mode 100644 index 0000000..430bda3 --- /dev/null +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/ScientifiqueDTO.java @@ -0,0 +1,54 @@ +package fr.iut.sciencequest.sae.dto; + +import com.fasterxml.jackson.annotation.JsonInclude; +import fr.iut.sciencequest.sae.entities.Difficulte; +import fr.iut.sciencequest.sae.entities.Sexe; +import fr.iut.sciencequest.sae.entities.Thematique; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotEmpty; +import jakarta.validation.constraints.NotNull; +import jakarta.validation.constraints.Size; +import lombok.*; +import org.hibernate.validator.constraints.URL; +import org.springframework.hateoas.RepresentationModel; + +import java.util.Date; + + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class ScientifiqueDTO extends RepresentationModel { + @NotNull + private int id; + + @NotNull + private Difficulte difficulte; + + @NotNull + private Thematique thematique; + + @URL + private String pathToPhoto; + + @NotBlank + private String nom; + + @NotBlank + private String prenom; + + @NotBlank + private String descriptif; + + @NotEmpty + private Date dateNaissance; + + @NotBlank + private Sexe sexe; + + @Size(min=0, max=1) + private double ratioTrouvee; +} 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 85d3e4f..4771b71 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 @@ -6,11 +6,13 @@ 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="admin") public class Admin extends BaseEntity { 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 fd8423b..dfb62c7 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 @@ -5,12 +5,15 @@ 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; @NoArgsConstructor @AllArgsConstructor @Data +@EqualsAndHashCode(callSuper = false) @Entity @Table(name="difficulte") public class Difficulte extends BaseEntity { 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 index 7e7f453..6ca06fe 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/IToProjection.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/IToProjection.java @@ -1,5 +1,5 @@ package fr.iut.sciencequest.sae.entities; public interface IToProjection { - public T toProjection(Class projectionType); + T toProjection(Class projectionType); } 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 cea5436..5bb7fa1 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,6 +1,7 @@ package fr.iut.sciencequest.sae.entities; +import fr.iut.sciencequest.sae.entities.joueur.Joueur; import jakarta.persistence.*; import lombok.AllArgsConstructor; import lombok.Data; @@ -11,5 +12,6 @@ import lombok.EqualsAndHashCode; @Data @Entity @Table(name = "invite") +@PrimaryKeyJoinColumn(name = "idjoueur") public class Invite extends Joueur { } 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 feb6515..2d96ad3 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 @@ -6,24 +6,26 @@ 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="jeu") public class Jeu extends BaseEntity { @Id - @NotNull + //@NotNull @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; - @NotBlank + //@NotBlank @Column(unique = true) private String nom; @Column(name = "nbrparties") - @Min(0) + //@Min(0) private int nbrParties = 0; } 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 dcfd678..6546dbf 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,11 +1,18 @@ 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; import lombok.NoArgsConstructor; +import org.hibernate.annotations.Fetch; +import org.hibernate.annotations.FetchMode; +import java.util.List; + +@EqualsAndHashCode(callSuper = true) @AllArgsConstructor @NoArgsConstructor @Data @@ -13,21 +20,18 @@ import lombok.NoArgsConstructor; @Table(name="partie") public class Partie extends BaseEntity { @Id - @NotNull @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; @Column(name = "codeinvitation", unique = true) private String codeInvitation; - /*private Jeu jeu; - @Getter() private Set joueurs; - public boolean add(Joueur joueur){ - return this.joueurs.add(joueur); - } - - public boolean remove(Joueur joueur){ - return this.joueurs.remove(joueur); - } - */ + @OneToMany(mappedBy = "id") + @Fetch(FetchMode.JOIN) // Sinon crash (Could not write JSON: failed to lazily initialize a collection of role) + private List joueurs; + + @NotNull + @ManyToOne + @JoinColumn(name="idjeu") + 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 b39fd0c..c9cd02e 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 @@ -4,6 +4,7 @@ import jakarta.validation.constraints.NotEmpty; import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; import org.hibernate.annotations.Fetch; import org.hibernate.annotations.FetchMode; @@ -14,16 +15,15 @@ import java.util.List; @AllArgsConstructor @NoArgsConstructor @Data +@EqualsAndHashCode(callSuper = false) @Entity @Table(name="question") public class Question extends BaseEntity { @Id - @NotNull @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; private String question; - @NotEmpty @OneToMany(mappedBy = "id") @Fetch(FetchMode.JOIN) // Sinon crash (Could not write JSON: failed to lazily initialize a collection of role) 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 3b9dff9..640b4b7 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 @@ -4,11 +4,13 @@ import jakarta.persistence.*; import jakarta.validation.constraints.NotNull; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; @AllArgsConstructor @NoArgsConstructor @Data +@EqualsAndHashCode(callSuper = false) @Entity @Table(name="reponse") public class Reponse extends BaseEntity { 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 ab29139..749c9a0 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 @@ -5,12 +5,14 @@ import jakarta.persistence.*; import jakarta.validation.constraints.NotBlank; import lombok.AllArgsConstructor; import lombok.Data; +import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; @NoArgsConstructor @AllArgsConstructor @Data +@EqualsAndHashCode(callSuper = false) @Entity @Table(name="thematique") public class Thematique extends BaseEntity { 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 21466aa..04bfa80 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,6 +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; @@ -16,7 +17,8 @@ import lombok.NoArgsConstructor; @Data @Entity @Table(name="utilisateur") -public class Utilisateur extends Joueur{ +@PrimaryKeyJoinColumn(name = "idjoueur") +public class Utilisateur extends Joueur { @Email(message="Veuillez fournir une adresse mail valide") @NotNull @Column(unique = true) 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 index 4e81cbf..70f7a65 100644 --- 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 @@ -7,11 +7,13 @@ 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 { 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 new file mode 100644 index 0000000..f07117e --- /dev/null +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/joueur/IIdAndPseudoOnlyProjection.java @@ -0,0 +1,6 @@ +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/Joueur.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/joueur/Joueur.java similarity index 64% rename from SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Joueur.java rename to SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/joueur/Joueur.java index 7d9c767..c1dc1c9 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Joueur.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/joueur/Joueur.java @@ -1,26 +1,31 @@ -package fr.iut.sciencequest.sae.entities; +package fr.iut.sciencequest.sae.entities.joueur; +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; import lombok.NoArgsConstructor; @AllArgsConstructor @NoArgsConstructor @Data +@EqualsAndHashCode(callSuper = false) @Inheritance ( strategy = InheritanceType.JOINED) @Entity @Table(name="joueur") public abstract class Joueur extends BaseEntity { @Id - @NotNull @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; - @NotBlank @Column(unique = true) private String pseudo; - //private Partie partie; + + @ManyToOne + @JoinColumn(name="idpartie") + private Partie partie; } 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 index 1e130af..a66fbc1 100644 --- 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 @@ -10,8 +10,8 @@ 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.annotations.Type; import org.hibernate.validator.constraints.URL; import org.springframework.hateoas.server.core.Relation; @@ -21,46 +21,37 @@ import java.util.Date; @RequiredArgsConstructor @Relation(collectionRelation = "scientifiques", itemRelation = "scientifique") @Data +@EqualsAndHashCode(callSuper = false) @Entity @Table(name = "scientifique") public class Scientifique extends BaseEntity { @Id - @NotNull @GeneratedValue(strategy = GenerationType.IDENTITY) private int id; - @NotNull @ManyToOne @JoinColumn(name="iddifficulte") private Difficulte difficulte; - @NotNull @ManyToOne @JoinColumn(name="idthematique") private Thematique thematique; - @URL @Column(name = "photo") private String pathToPhoto; - @NotBlank private String nom; - @NotBlank private String prenom; - @NotBlank private String descriptif; - @NotBlank @Column(name = "datenaissance") private Date dateNaissance; - @NotBlank @Enumerated(EnumType.STRING) private Sexe sexe; @Column(name = "ratiotrouvee") - @Size(min=0, max=1) private double ratioTrouve = 0.0; } 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 1fc0109..08569c3 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 @@ -5,8 +5,6 @@ import org.springframework.data.repository.CrudRepository; import org.springframework.data.repository.PagingAndSortingRepository; import org.springframework.stereotype.Repository; -import java.util.Optional; - @Repository public interface IndiceRepository extends PagingAndSortingRepository, CrudRepository { Iterable findByScientifiqueId(int id, Class type); 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 61ae108..e9b7066 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; +import fr.iut.sciencequest.sae.entities.joueur.Joueur; import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Repository; 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 cfc050c..42cfeb3 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 @@ -1,11 +1,7 @@ package fr.iut.sciencequest.sae.repositories; import fr.iut.sciencequest.sae.entities.Question; -import org.springframework.data.domain.PageRequest; -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 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 2fcc101..6695693 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 @@ -7,5 +7,5 @@ import org.springframework.stereotype.Repository; @Repository public interface ThematiqueRepository extends CrudRepository { - public boolean existsByLibelle(String libelle); + boolean existsByLibelle(String libelle); } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/PartieService.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/PartieService.java index e81e762..b7e7e1b 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/PartieService.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/PartieService.java @@ -1,4 +1,25 @@ package fr.iut.sciencequest.sae.services; -public class PartieService { +import fr.iut.sciencequest.sae.entities.Partie; +import fr.iut.sciencequest.sae.exceptions.notFound.PartieNotFoundException; +import fr.iut.sciencequest.sae.repositories.PartieRepository; +import fr.iut.sciencequest.sae.services.interfaces.IPartieService; +import lombok.AllArgsConstructor; +import org.springframework.stereotype.Service; + +import java.util.Optional; + +@AllArgsConstructor +@Service +public class PartieService implements IPartieService { + private final PartieRepository partieRepository; + + public Partie findById(int id) { + return this.partieRepository.findById(id).orElseThrow(() -> + new PartieNotFoundException("Partie", id) + ); + } + public Partie save(Partie p) { + return new Partie(); + } } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/QuestionService.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/QuestionService.java index 455ccbb..db31cec 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/QuestionService.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/QuestionService.java @@ -4,13 +4,11 @@ import fr.iut.sciencequest.sae.entities.Question; import fr.iut.sciencequest.sae.repositories.QuestionRepository; import fr.iut.sciencequest.sae.services.interfaces.IQuestionService; import org.springframework.data.domain.Page; -import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; @Service public class QuestionService implements IQuestionService { - private static final int PAGE_SIZE = 1; private final QuestionRepository questionRepository; public QuestionService(QuestionRepository questionRepository) { 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 d2e15f0..8a79fb2 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 @@ -10,8 +10,6 @@ import org.springframework.data.domain.PageRequest; import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; -import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.linkTo; - @Service public class ScientifiqueService implements IScientifiqueService { @@ -36,9 +34,8 @@ public class ScientifiqueService implements IScientifiqueService { } @Override - public Page findAll(Integer page) { - Pageable paging = PageRequest.of(page, PAGE_SIZE); - return scientifiqueRepository.findAll(paging); + public Page findAll(Pageable page) { + return scientifiqueRepository.findAll(page); } @Override diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/interfaces/IPartieService.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/interfaces/IPartieService.java index 3655490..50897a1 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/interfaces/IPartieService.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/interfaces/IPartieService.java @@ -1,5 +1,8 @@ package fr.iut.sciencequest.sae.services.interfaces; -public class IPartieService { +import fr.iut.sciencequest.sae.entities.Partie; +public interface IPartieService { + Partie findById(int id); + Partie save(Partie p); } 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 7cdc0f9..8d96590 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 @@ -3,13 +3,14 @@ package fr.iut.sciencequest.sae.services.interfaces; import fr.iut.sciencequest.sae.entities.scientifique.Scientifique; import fr.iut.sciencequest.sae.entities.indice.IIndiceidAndLibelleAndScientifiqueIdOnlyProjection; import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; public interface IScientifiqueService { Scientifique update(Scientifique scientifique); Scientifique create(Scientifique scientifique); - Page findAll(Integer page); + Page findAll(Pageable page); Scientifique findById(int id); diff --git a/SpringBootProject/src/main/resources/schema.sql b/SpringBootProject/src/main/resources/schema.sql index 02345c8..b5a3de4 100644 --- a/SpringBootProject/src/main/resources/schema.sql +++ b/SpringBootProject/src/main/resources/schema.sql @@ -94,7 +94,7 @@ CREATE TABLE Jeu( CREATE TABLE Partie( id SERIAL PRIMARY KEY, - codeInvitation varchar(10) NOT NULL UNIQUE, + codeInvitation varchar(5) NOT NULL UNIQUE, idJeu integer REFERENCES Jeu(id) ); @@ -166,11 +166,16 @@ VALUES ('Sophie Germain', 3, 3); -- Utilisateurs -INSERT INTO Joueur(id,pseudo) VALUES (1337, 'moi, le meilleur joueur du monde'); -INSERT INTO Utilisateur(idJoueur,email,password) VALUES (1337, 'joueur','$2y$10$juGnlWC9cS19popEKLZsYeir0Jl39k6hDl0dpaCix00FDcdiEbtmS'); +INSERT INTO Joueur(pseudo) VALUES ('moi, le meilleur joueur du monde'); --id = 1 +INSERT INTO Utilisateur(idJoueur,email,password) VALUES (1, 'joueur','$2y$10$juGnlWC9cS19popEKLZsYeir0Jl39k6hDl0dpaCix00FDcdiEbtmS'); -- mdp = test -INSERT INTO decouvrir(idUtilisateur,idScientifique) VALUES (1337,1); +-- Découvrir +INSERT INTO decouvrir(idUtilisateur,idScientifique) VALUES (1,1); +-- Admin INSERT INTO Admin(id,email,password) VALUES (1, 'admin','$2y$10$juGnlWC9cS19popEKLZsYeir0Jl39k6hDl0dpaCix00FDcdiEbtmS'); -- mdp = test + +-- Partie +INSERT INTO Partie(codeInvitation, idJeu) VALUES ('abcde', 1); \ No newline at end of file