From 91cca9e8101176f420e57237e7eaff324df98484 Mon Sep 17 00:00:00 2001 From: visoulier Date: Wed, 28 Feb 2024 03:59:52 +0100 Subject: [PATCH] ajout service thematique et route patch --- .../sae/controllers/ThematiqueController.java | 49 +++++++------------ .../exceptions/EntityNotFoundException.java | 12 +++++ .../sae/services/ThematiqueService.java | 12 +++++ .../sae/services/ThematiqueServiceImpl.java | 46 +++++++++++++++++ 4 files changed, 87 insertions(+), 32 deletions(-) create mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/EntityNotFoundException.java create mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/ThematiqueService.java create mode 100644 SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/ThematiqueServiceImpl.java 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 c5f4e88..88c5116 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,56 +1,41 @@ package fr.iut.sciencequest.sae.controllers; import fr.iut.sciencequest.sae.entities.Thematique; -import fr.iut.sciencequest.sae.exceptions.DuplicatedEntity; -import fr.iut.sciencequest.sae.repositories.ThematiqueRepository; -import jakarta.servlet.http.HttpServletRequest; -import jakarta.validation.ConstraintViolationException; +import fr.iut.sciencequest.sae.services.ThematiqueService; import jakarta.validation.Valid; -import org.springframework.dao.DataIntegrityViolationException; import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; -import org.springframework.http.ResponseEntity; -import org.springframework.validation.Errors; -import org.springframework.validation.FieldError; -import org.springframework.web.bind.MethodArgumentNotValidException; import org.springframework.web.bind.annotation.*; -import java.sql.SQLIntegrityConstraintViolationException; -import java.util.HashMap; -import java.util.List; -import java.util.Map; - @RestController @RequestMapping("/api/v1/thematiques") public class ThematiqueController { - private final ThematiqueRepository thematiqueRepository; + private final ThematiqueService thematiqueService; - public ThematiqueController(ThematiqueRepository thematiqueRepository) { - this.thematiqueRepository = thematiqueRepository; - } -/* - @ExceptionHandler(ConstraintViolationException.class) - public void t(ConstraintViolationException e){ - throw new RuntimeException(); - }*/ - - @ExceptionHandler(org.hibernate.exception.ConstraintViolationException.class) - public void - handleConstraintViolationException(ConstraintViolationException ex){ - System.out.println("o ?"); + public ThematiqueController(ThematiqueService thematiqueService) { + this.thematiqueService = thematiqueService; } @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE) @ResponseStatus(HttpStatus.OK) public Iterable getAllThematiques() { - return this.thematiqueRepository.findAll(); + return this.thematiqueService.findAll(); } + + //TODO : gestion des erreurs remontées par @Valid + //TODO : ajouter liens hateos @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE) @ResponseStatus(HttpStatus.CREATED) - public Thematique postThematique(@Valid @RequestBody Thematique thematique){ - thematique = this.thematiqueRepository.save(thematique); - return thematique; + public Thematique createThematique(@Valid @RequestBody Thematique thematique){ + return 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){ + thematique.setId(id); + return this.thematiqueService.update(thematique); } } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/EntityNotFoundException.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/EntityNotFoundException.java new file mode 100644 index 0000000..4bd26d1 --- /dev/null +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/EntityNotFoundException.java @@ -0,0 +1,12 @@ +package fr.iut.sciencequest.sae.exceptions; + + +import org.springframework.http.HttpStatus; +import org.springframework.web.bind.annotation.ResponseStatus; + +@ResponseStatus(HttpStatus.NOT_FOUND) +public class EntityNotFoundException extends RuntimeException { + public EntityNotFoundException(){ + super("entity not found"); + } +} diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/ThematiqueService.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/ThematiqueService.java new file mode 100644 index 0000000..2c29ab7 --- /dev/null +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/ThematiqueService.java @@ -0,0 +1,12 @@ +package fr.iut.sciencequest.sae.services; + + +import fr.iut.sciencequest.sae.entities.Thematique; + +public interface ThematiqueService { + public Thematique update(Thematique thematique); + + public Thematique create(Thematique thematique); + + public Iterable findAll(); +} diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/ThematiqueServiceImpl.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/ThematiqueServiceImpl.java new file mode 100644 index 0000000..596868d --- /dev/null +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/ThematiqueServiceImpl.java @@ -0,0 +1,46 @@ +package fr.iut.sciencequest.sae.services; + +import fr.iut.sciencequest.sae.entities.Thematique; +import fr.iut.sciencequest.sae.exceptions.DuplicatedFieldException; +import fr.iut.sciencequest.sae.exceptions.DuplicatedIdException; +import fr.iut.sciencequest.sae.exceptions.EntityNotFoundException; +import fr.iut.sciencequest.sae.repositories.ThematiqueRepository; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.stereotype.Service; + +@Service +public class ThematiqueServiceImpl implements ThematiqueService{ + + @Autowired + private ThematiqueRepository thematiqueRepository; + + + private void checkFieldsConstraints(Thematique thematique){ + if(this.thematiqueRepository.existsByLibelle(thematique.getLibelle())){ + throw new DuplicatedFieldException("libelle"); + } + } + @Override + public Thematique update(Thematique thematique){ + if(!this.thematiqueRepository.existsById(thematique.getId())){ + throw new EntityNotFoundException(); + } + this.checkFieldsConstraints(thematique); + return this.thematiqueRepository.save(thematique); + } + + @Override + public Thematique create(Thematique thematique){ + if(this.thematiqueRepository.existsById(thematique.getId())){ + throw new DuplicatedIdException(); + } + this.checkFieldsConstraints(thematique); + return this.thematiqueRepository.save(thematique); + } + + @Override + public Iterable findAll(){ + return this.thematiqueRepository.findAll(); + } + +}