Travail jour 4 - pause midi -

Springboot
Alix JEUDI--LEMOINE 1 year ago
parent 790b121a57
commit 0b22f02742

@ -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)));
}
}

@ -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);
}

@ -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<Question, QuestionModel> {
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;
}
}

@ -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<EntityModel<T>> 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);

@ -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<Question> pagedResourcesAssembler;
public QuestionController(QuestionService questionService) {
this.questionService = questionService;
}
@RequestMapping(method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
public CollectionModel<EntityModel<Question>> getAllQuestions(@RequestParam(name = "page") Optional<Integer> page) {
public PagedModel<QuestionModel> getAllQuestions(Pageable p) {
try {
return getPageableCollectionModel(questionService.findAll(page.orElse(0)), page.orElse(0), "getAllQuestions");
Page<Question> questionPage = questionService.findAll(p);
return pagedResourcesAssembler.toModel(questionPage, questionModelAssembler);
} catch (IllegalArgumentException e) {
throw new IncorrectPageException("numéro de page incorrect");
}

@ -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<QuestionModel> {
private int id;
private String question;
private List<Reponse> reponses;
}

@ -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<Question, Integer> {}
public interface QuestionRepository extends JpaRepository<Question, Integer> {}

@ -18,8 +18,8 @@ public class QuestionService implements IQuestionService {
}
@Override
public Page<Question> findAll(Integer page) {
Pageable paging = PageRequest.of(page, PAGE_SIZE);
return questionRepository.findAll(paging);
public Page<Question> findAll(Pageable p) {
//Pageable paging = PageRequest.of(page, PAGE_SIZE);
return questionRepository.findAll(p);
}
}

@ -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<Question> findAll(Integer page);
Page<Question> findAll(Pageable page);
}

Loading…
Cancel
Save