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 62d7b2a..947c44c 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/ApplicationConfig.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/ApplicationConfig.java @@ -4,6 +4,7 @@ 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; @@ -15,4 +16,5 @@ public class ApplicationConfig implements WebMvcConfigurer { public void configureContentNegotiation(ContentNegotiationConfigurer configurer) { configurer.strategies(List.of(new FixedContentNegotiationStrategy(MediaType.APPLICATION_JSON))); } + } \ No newline at end of file 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 3595451..01bc582 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/SaeApplication.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/SaeApplication.java @@ -2,10 +2,21 @@ 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.web.servlet.config.annotation.CorsRegistry; +import org.springframework.web.servlet.config.annotation.WebMvcConfigurer; @SpringBootApplication public class SaeApplication { - + @Bean + public WebMvcConfigurer corsConfigurer() { + return new WebMvcConfigurer() { + @Override + public void addCorsMappings(CorsRegistry registry) { + registry.addMapping("/**").allowedOrigins("*"); + } + }; + } public static void main(String[] args) { SpringApplication.run(SaeApplication.class, args); } 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 new file mode 100644 index 0000000..88ddd90 --- /dev/null +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/assemblers/QuestionModelAssembler.java @@ -0,0 +1,26 @@ +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 org.springframework.hateoas.server.mvc.RepresentationModelAssemblerSupport; +import org.springframework.stereotype.Component; + +@Component +public class QuestionModelAssembler extends RepresentationModelAssemblerSupport { + + public QuestionModelAssembler() { + super(QuestionController.class, QuestionModel.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; + } +} 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 43e5454..e608fe9 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 @@ -1,6 +1,7 @@ package fr.iut.sciencequest.sae.controllers; import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.hateoas.CollectionModel; import org.springframework.hateoas.EntityModel; import org.springframework.hateoas.Link; @@ -52,10 +53,10 @@ public class Controller { List> entities = pagedResult.map(EntityModel::of).toList(); Class[] argTypes = new Class[args.length+1]; - for (int i = 0; i < args.length; i++) { + argTypes[0] = Pageable.class; + for (int i = 1; i < args.length; i++) { argTypes[i] = args[i].getClass(); } - argTypes[args.length] = Optional.class; Method finalMethod = this.getClass().getMethod(method, argTypes); 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 f27af1d..9d15eb9 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,30 +1,39 @@ package fr.iut.sciencequest.sae.controllers; +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.services.QuestionService; -import jakarta.servlet.http.HttpServletRequest; -import org.springframework.hateoas.CollectionModel; -import org.springframework.hateoas.EntityModel; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; +import org.springframework.data.web.PagedResourcesAssembler; +import org.springframework.hateoas.PagedModel; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; -import java.util.Optional; - @RestController @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; } @RequestMapping(method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE) @ResponseBody - public CollectionModel> getAllQuestions(@RequestParam(name = "page") Optional page) { + public PagedModel getAllQuestions(Pageable p) { try { - return getPageableCollectionModel(questionService.findAll(page.orElse(0)), page.orElse(0), "getAllQuestions"); + Page questionPage = questionService.findAll(p); + return pagedResourcesAssembler.toModel(questionPage, questionModelAssembler); } 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/models/QuestionModel.java new file mode 100644 index 0000000..829b54c --- /dev/null +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/models/QuestionModel.java @@ -0,0 +1,22 @@ +package fr.iut.sciencequest.sae.models; + +import com.fasterxml.jackson.annotation.JsonInclude; +import fr.iut.sciencequest.sae.entities.Reponse; +import lombok.*; +import org.springframework.hateoas.RepresentationModel; +import org.springframework.hateoas.server.core.Relation; + + +import java.util.List; + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class QuestionModel extends RepresentationModel { + private int id; + private String question; + private List reponses; +} 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 0a5a69e..cfc050c 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 @@ -3,9 +3,10 @@ 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 -public interface QuestionRepository extends PagingAndSortingRepository {} +public interface QuestionRepository extends JpaRepository {} 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 06c72ac..455ccbb 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 @@ -18,8 +18,8 @@ public class QuestionService implements IQuestionService { } @Override - public Page findAll(Integer page) { - Pageable paging = PageRequest.of(page, PAGE_SIZE); - return questionRepository.findAll(paging); + public Page findAll(Pageable p) { + //Pageable paging = PageRequest.of(page, PAGE_SIZE); + return questionRepository.findAll(p); } } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/interfaces/IQuestionService.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/interfaces/IQuestionService.java index 9a6f46f..310b813 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/interfaces/IQuestionService.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/interfaces/IQuestionService.java @@ -2,7 +2,8 @@ package fr.iut.sciencequest.sae.services.interfaces; import fr.iut.sciencequest.sae.entities.Question; import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; public interface IQuestionService { - Page findAll(Integer page); + Page findAll(Pageable page); }