diff --git a/SpringBootProject/pom.xml b/SpringBootProject/pom.xml
index 56c9fab..42c773a 100644
--- a/SpringBootProject/pom.xml
+++ b/SpringBootProject/pom.xml
@@ -41,6 +41,10 @@
org.springframework.boot
spring-boot-starter-data-jpa
+
+ org.springframework.boot
+ spring-boot-starter-validation
+
org.springframework.boot
spring-boot-starter-hateoas
diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/ApplicationConfig.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/ApplicationConfig.java
new file mode 100644
index 0000000..62d7b2a
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/ApplicationConfig.java
@@ -0,0 +1,18 @@
+package fr.iut.sciencequest.sae;
+
+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.WebMvcConfigurer;
+
+import java.util.List;
+
+@Configuration
+public class ApplicationConfig implements WebMvcConfigurer {
+ // Permet de forcer l'affichage des erreurs en JSON sans prendre en compte les headers du client
+ @Override
+ 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/controllers/PartieController.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/PartieController.java
new file mode 100644
index 0000000..51747ea
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/PartieController.java
@@ -0,0 +1,52 @@
+package fr.iut.sciencequest.sae.controllers;
+
+import fr.iut.sciencequest.sae.entities.Partie;
+import fr.iut.sciencequest.sae.exceptions.DuplicatedEntity;
+import fr.iut.sciencequest.sae.exceptions.PartieNotFoundException;
+import fr.iut.sciencequest.sae.repositories.PartieRepository;
+import jakarta.servlet.http.HttpServletRequest;
+import org.springframework.dao.DataIntegrityViolationException;
+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.*;
+import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;
+
+import javax.print.attribute.standard.Media;
+import java.util.Optional;
+
+@RestController
+@RequestMapping("/api/v1/partie")
+public class PartieController {
+
+ private static final int PAGE_SIZE = 5;
+ private final PartieRepository partieRepository;
+
+ public PartieController(PartieRepository partieRepository) {
+ this.partieRepository = partieRepository;
+ }
+
+ @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 introuvable avec l'ID : " + id)
+ );
+
+ Link selfLink = linkTo(methodOn(PartieController.class).getPartie(id,request)).withSelfRel();
+ return EntityModel.of(Optional.ofNullable(partie), selfLink);
+ }
+
+ @RequestMapping(method = RequestMethod.POST, produces = MediaType.APPLICATION_JSON_VALUE)
+ @ResponseStatus(HttpStatus.CREATED)
+ public Partie createPartie(@RequestBody Partie partie) {
+ try {
+ return this.partieRepository.save(partie);
+ } catch (DataIntegrityViolationException e) {
+ throw new DuplicatedEntity("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 852825b..484b1c7 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
@@ -55,7 +55,7 @@ public class QuestionController {
return result;
} catch (IllegalArgumentException e) {
- throw new IncorrectPageException(request.getRequestURI(), "numéro de page incorrect");
+ throw new IncorrectPageException("numéro de page incorrect");
}
}
}
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 c611094..5127c6a 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
@@ -2,71 +2,117 @@ package fr.iut.sciencequest.sae.controllers;
import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;
+import fr.iut.sciencequest.sae.entities.Indice;
import fr.iut.sciencequest.sae.entities.Scientifique;
+import fr.iut.sciencequest.sae.exceptions.DuplicatedEntity;
import fr.iut.sciencequest.sae.exceptions.IncorrectPageException;
import fr.iut.sciencequest.sae.exceptions.ScientifiqueNotFoundException;
+import fr.iut.sciencequest.sae.repositories.IndiceRepository;
import fr.iut.sciencequest.sae.repositories.ScientifiqueRepository;
-import jakarta.servlet.http.HttpServletRequest;
+import org.springframework.dao.DataIntegrityViolationException;
import org.springframework.data.domain.Page;
import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
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.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
import java.util.List;
import java.util.Optional;
-@Controller()
+@RestController
@RequestMapping("/api/v1/scientifiques")
public class ScientifiqueController {
- private static final int PAGE_SIZE = 10;
+ private static final int PAGE_SIZE = 1;
+
private final ScientifiqueRepository scientifiqueRepository;
+ private final IndiceRepository indiceRepository;
- public ScientifiqueController(ScientifiqueRepository scientifiqueRepository) {
+ public ScientifiqueController(ScientifiqueRepository scientifiqueRepository, IndiceRepository indiceRepository) {
this.scientifiqueRepository = scientifiqueRepository;
+ this.indiceRepository = indiceRepository;
}
- @RequestMapping(method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
+ @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
- public CollectionModel> getAllScientists(@RequestParam(name = "page") Optional page, HttpServletRequest request) {
+ public CollectionModel> getAllScientists(@RequestParam(name = "page") Optional page) {
try {
Pageable paging = PageRequest.of(page.orElse(0), PAGE_SIZE);
Page pagedResult = scientifiqueRepository.findAll(paging);
List> scientifiques = pagedResult.map(EntityModel::of).toList();
- Link selfLink = linkTo(methodOn(ScientifiqueController.class).getAllScientists(page, request)).withSelfRel().expand(page.map(Object::toString).orElse("0"));
+ Link selfLink = linkTo(methodOn(ScientifiqueController.class).getAllScientists(page)).withSelfRel().expand(page.map(Object::toString).orElse("0"));
CollectionModel> result = CollectionModel.of(scientifiques, selfLink);
if (pagedResult.hasPrevious()) {
- Link prevLink = linkTo(methodOn(QuestionController.class).getAllQuestions(Optional.of(pagedResult.previousPageable().getPageNumber()), request)).withRel("previous");
+ Link prevLink = linkTo(methodOn(ScientifiqueController.class).getAllScientists(Optional.of(pagedResult.previousPageable().getPageNumber()))).withRel("previous");
result.add(prevLink.expand(pagedResult.previousPageable().getPageNumber()));
}
if (pagedResult.hasNext()) {
- Link nextLink = linkTo(methodOn(QuestionController.class).getAllQuestions(Optional.of(pagedResult.nextPageable().getPageNumber()), request)).withRel("next");
+ Link nextLink = linkTo(methodOn(ScientifiqueController.class).getAllScientists(Optional.of(pagedResult.nextPageable().getPageNumber()))).withRel("next");
result.add(nextLink.expand(pagedResult.nextPageable().getPageNumber()));
}
return result;
} catch (IllegalArgumentException e) {
- throw new IncorrectPageException(request.getRequestURI(), "numéro de page incorrect");
+ throw new IncorrectPageException("numéro de page incorrect");
}
}
- @RequestMapping(value = "/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
+ @GetMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseBody
- public EntityModel> getScientistById(@PathVariable int id, HttpServletRequest request) {
+ public EntityModel> getScientistById(@PathVariable int id) {
Optional scientifiqueOptional = this.scientifiqueRepository.findById(id);
- Scientifique scientifique = scientifiqueOptional.orElseThrow(() -> new ScientifiqueNotFoundException(request.getRequestURI(), "Scientifique non trouvé avec l'ID : " + id));
+ Scientifique scientifique = scientifiqueOptional.orElseThrow(() -> new ScientifiqueNotFoundException("Scientifique non trouvé avec l'ID : " + id));
- Link selfLink = linkTo(methodOn(ScientifiqueController.class).getScientistById(id, request)).withSelfRel();
+ Link selfLink = linkTo(methodOn(ScientifiqueController.class).getScientistById(id)).withSelfRel();
return EntityModel.of(Optional.ofNullable(scientifique), selfLink);
}
+
+ @GetMapping(value="/{id}/indices", produces = MediaType.APPLICATION_JSON_VALUE)
+ @ResponseBody
+ public CollectionModel> getScientistHints(@PathVariable int id, @RequestParam(name = "page") Optional page) {
+ try {
+ Pageable paging = PageRequest.of(page.orElse(0), PAGE_SIZE);
+ Page pagedResult = indiceRepository.findAll(paging);
+
+ List> indices = pagedResult.map(EntityModel::of).toList();
+
+ Link selfLink = linkTo(methodOn(ScientifiqueController.class).getScientistHints(id, page)).withSelfRel().expand(page.map(Object::toString).orElse("0"));
+
+ CollectionModel> result = CollectionModel.of(indices, selfLink);
+
+ if (pagedResult.hasPrevious()) {
+ Link prevLink = linkTo(methodOn(ScientifiqueController.class).getScientistHints(id, Optional.of(pagedResult.previousPageable().getPageNumber()))).withRel("previous");
+ result.add(prevLink.expand(pagedResult.previousPageable().getPageNumber()));
+ }
+
+ if (pagedResult.hasNext()) {
+ Link nextLink = linkTo(methodOn(ScientifiqueController.class).getScientistHints(id, Optional.of(pagedResult.nextPageable().getPageNumber()))).withRel("next");
+ result.add(nextLink.expand(pagedResult.nextPageable().getPageNumber()));
+ }
+
+ return result;
+ } catch (IllegalArgumentException e) {
+ throw new IncorrectPageException("numéro de page incorrect");
+ }
+ }
+
+ @PostMapping(value="/{id}/indices", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
+ @ResponseStatus(HttpStatus.CREATED)
+ public Indice postIndice(@RequestBody Indice indice){
+ try{
+
+ return this.indiceRepository.save(indice);
+ } catch (DataIntegrityViolationException e){
+ throw new DuplicatedEntity(e.getMessage());
+ }
+ }
}
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 96b3d68..ef6401c 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,28 +1,40 @@
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 org.springframework.dao.DataIntegrityViolationException;
+import org.springframework.http.HttpStatus;
import org.springframework.http.MediaType;
-import org.springframework.stereotype.Controller;
import org.springframework.web.bind.annotation.*;
-@Controller
+@RestController
@RequestMapping("/api/v1/thematiques")
public class ThematiqueController {
+
private final ThematiqueRepository thematiqueRepository;
public ThematiqueController(ThematiqueRepository thematiqueRepository) {
this.thematiqueRepository = thematiqueRepository;
}
- @RequestMapping(method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
- @ResponseBody
+ @GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
+ @ResponseStatus(HttpStatus.OK)
public Iterable getAllThematiques() {
return this.thematiqueRepository.findAll();
}
@PostMapping(produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
-
- @ResponseBody
- public Thematique postThematique(@)
+ @ResponseStatus(HttpStatus.CREATED)
+ public Thematique postThematique(@RequestBody Thematique thematique, HttpServletRequest request){
+ if(this.thematiqueRepository.existsById(thematique.getId()))
+ throw new DuplicatedEntity("Une thématique avec l'ID "+thematique.getId()+" existe déjà");
+ try{
+ thematique = this.thematiqueRepository.save(thematique);
+ return thematique;
+ } catch (DataIntegrityViolationException e) {
+ throw new DuplicatedEntity("Une thématique avec le libelle : " + thematique.getLibelle() + " existe déjà");
+ }
+ }
}
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 313fb99..f53d4ca 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
@@ -1,6 +1,9 @@
package fr.iut.sciencequest.sae.entities;
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.NoArgsConstructor;
@@ -12,8 +15,18 @@ import lombok.NoArgsConstructor;
@Table(name="admin")
public class Admin {
@Id
+ @NotNull
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
- private String email, password;
+ @Email(message="Veuillez fournir une adresse mail valide")
+ @NotNull
+ @NotBlank
+ @Column(unique = true)
+ private String email;
+
+ @NotNull
+ @NotBlank
+ @Column()
+ private String password;
}
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 953c773..dcfcfef 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,6 +1,8 @@
package fr.iut.sciencequest.sae.entities;
import jakarta.persistence.*;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -13,7 +15,11 @@ import lombok.NoArgsConstructor;
@Table(name="difficulte")
public class Difficulte {
@Id
+ @NotNull
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
+
+ @NotBlank
+ @Column(unique = true)
private String libelle;
}
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
index f6bb849..1d919ed 100644
--- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Indice.java
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Indice.java
@@ -1,6 +1,8 @@
package fr.iut.sciencequest.sae.entities;
import jakarta.persistence.*;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -12,8 +14,13 @@ import lombok.NoArgsConstructor;
@Table(name="indice")
public class Indice {
@Id
+ @NotNull
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
+
+ @NotBlank
private String libelle;
- //private Scientifique scientifique;
+
+ @NotNull
+ private int idScientifique;
}
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 3bb7ea4..4c740a4 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
@@ -1,9 +1,13 @@
package fr.iut.sciencequest.sae.entities;
import jakarta.persistence.*;
+import jakarta.validation.constraints.Min;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
+import org.springframework.boot.context.properties.bind.DefaultValue;
@NoArgsConstructor
@AllArgsConstructor
@@ -12,9 +16,15 @@ import lombok.NoArgsConstructor;
@Table(name="jeu")
public class Jeu {
@Id
+ @NotNull
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
+
+ @NotBlank
+ @Column(unique = true)
private String nom;
+
@Column(name = "nbrparties")
- private int nbrParties;
+ @Min(0)
+ private int nbrParties = 0;
}
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.java
index 95d40ce..d3005b7 100644
--- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Joueur.java
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Joueur.java
@@ -1,6 +1,8 @@
package fr.iut.sciencequest.sae.entities;
import jakarta.persistence.*;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -13,8 +15,12 @@ import lombok.NoArgsConstructor;
@Table(name="joueur")
public abstract class Joueur {
@Id
+ @NotNull
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
+
+ @NotBlank
+ @Column(unique = true)
private String pseudo;
//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 b8a52ae..455dfef 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,6 +1,7 @@
package fr.iut.sciencequest.sae.entities;
import jakarta.persistence.*;
+import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.Getter;
@@ -15,9 +16,11 @@ import java.util.Set;
@Table(name="partie")
public class Partie {
@Id
+ @NotNull
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
- @Column(name = "codeinvitation")
+
+ @Column(name = "codeinvitation", unique = true)
private String codeInvitation;
/*private Jeu jeu;
@Getter() private Set joueurs;
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 26dbf11..4290c17 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,5 +1,7 @@
package fr.iut.sciencequest.sae.entities;
import jakarta.persistence.*;
+import jakarta.validation.constraints.NotEmpty;
+import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -14,10 +16,12 @@ import java.util.List;
@Table(name="question")
public class Question {
@Id
+ @NotNull
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
private String question;
+ @NotEmpty
@OneToMany(mappedBy = "id")
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 ea2033f..c3924e1 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,6 +1,7 @@
package fr.iut.sciencequest.sae.entities;
import jakarta.persistence.*;
+import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -12,8 +13,11 @@ import lombok.NoArgsConstructor;
@Table(name="reponse")
public class Reponse {
@Id
+ @NotNull
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
+
+ @NotNull
private String reponse;
}
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
index 6665ea9..336cae0 100644
--- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Scientifique.java
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Scientifique.java
@@ -1,6 +1,9 @@
package fr.iut.sciencequest.sae.entities;
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.RequiredArgsConstructor;
@@ -15,13 +18,16 @@ import java.util.Date;
@Table(name = "scientifique")
public class Scientifique {
@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;
@@ -29,13 +35,24 @@ public class Scientifique {
@Column(name = "photo")
private String pathToPhoto;
- private String nom, prenom, descriptif;
+ @NotBlank
+ private String nom;
+ @NotBlank
+ private String prenom;
+
+ @NotBlank
+ private String descriptif;
+
+ @NotBlank
@Column(name = "datenaissance")
private Date dateNaissance;
- private char sexe;
+ @NotBlank
+ @Enumerated(EnumType.STRING)
+ private Sexe sexe;
@Column(name = "ratiotrouvee")
- private double ratioTrouve;
+ @Size(min=0, max=1)
+ private double ratioTrouve = 0.0;
}
diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Sexe.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Sexe.java
new file mode 100644
index 0000000..e064ef7
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Sexe.java
@@ -0,0 +1,6 @@
+package fr.iut.sciencequest.sae.entities;
+
+public enum Sexe {
+ F,
+ H
+}
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 75b3a51..e825295 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,6 +1,8 @@
package fr.iut.sciencequest.sae.entities;
import jakarta.persistence.*;
+import jakarta.validation.constraints.NotBlank;
+import jakarta.validation.constraints.NotNull;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.NoArgsConstructor;
@@ -12,7 +14,11 @@ import lombok.NoArgsConstructor;
@Table(name="thematique")
public class Thematique {
@Id
+ @NotNull
@GeneratedValue(strategy = GenerationType.IDENTITY)
private int id;
+
+ @NotBlank
+ @Column(unique = true)
private String libelle;
}
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 a580fc4..05ee7ee 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
@@ -2,6 +2,9 @@ package fr.iut.sciencequest.sae.entities;
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;
@@ -14,9 +17,13 @@ import lombok.NoArgsConstructor;
@Entity
@Table(name="utilisateur")
public class Utilisateur extends Joueur{
+ @Email(message="Veuillez fournir une adresse mail valide")
+ @NotNull
+ @Column(unique = true)
private String email;
+
+ @NotBlank
@Column(name = "motdepasse")
private String motDePasse;
- private String pseudo;
}
diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/DuplicatedEntity.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/DuplicatedEntity.java
new file mode 100644
index 0000000..8bfefa0
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/DuplicatedEntity.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.CONFLICT)
+public class DuplicatedEntity extends RuntimeException {
+ public DuplicatedEntity(String message){
+ super(message);
+ }
+}
diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/IncorrectPageException.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/IncorrectPageException.java
index 9a807bf..57fbd68 100644
--- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/IncorrectPageException.java
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/IncorrectPageException.java
@@ -1,9 +1,12 @@
package fr.iut.sciencequest.sae.exceptions;
+import org.springframework.http.HttpStatus;
+import org.springframework.web.bind.annotation.ResponseStatus;
+
+@ResponseStatus(HttpStatus.NOT_ACCEPTABLE)
public class IncorrectPageException extends RuntimeException {
- public final String uri;
- public IncorrectPageException(String uri, String exception) {
+
+ public IncorrectPageException(String exception) {
super(exception);
- this.uri = uri;
}
}
diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/PartieNotFoundException.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/PartieNotFoundException.java
new file mode 100644
index 0000000..da3d34c
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/PartieNotFoundException.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 PartieNotFoundException extends RuntimeException{
+ public PartieNotFoundException(String message) {
+ super(message);
+ }
+}
diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/ScientifiqueNotFoundException.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/ScientifiqueNotFoundException.java
index dbe86ec..b5fbe36 100644
--- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/ScientifiqueNotFoundException.java
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/ScientifiqueNotFoundException.java
@@ -1,10 +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 ScientifiqueNotFoundException extends RuntimeException {
- public final String uri;
- public ScientifiqueNotFoundException(String uri, String exception) {
- super(exception);
- this.uri = uri;
+ public ScientifiqueNotFoundException(String message) {
+ super(message);
}
}
diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/advices/IncorrectPageAdvice.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/advices/IncorrectPageAdvice.java
deleted file mode 100644
index 30ea8b5..0000000
--- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/advices/IncorrectPageAdvice.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package fr.iut.sciencequest.sae.exceptions.advices;
-
-import fr.iut.sciencequest.sae.exceptions.IncorrectPageException;
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.ControllerAdvice;
-import org.springframework.web.bind.annotation.ExceptionHandler;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.ResponseStatus;
-
-import java.sql.Timestamp;
-import java.util.HashMap;
-import java.util.Map;
-
-@ControllerAdvice
-public class IncorrectPageAdvice {
- @ResponseBody
- @ExceptionHandler(IncorrectPageException.class)
- @ResponseStatus(HttpStatus.NOT_ACCEPTABLE)
- Map exceptionHandler(IncorrectPageException ex) {
- Map map = new HashMap<>();
- map.put("timestamp", String.valueOf(new Timestamp(System.currentTimeMillis())));
- map.put("error", ex.getMessage());
- map.put("status", HttpStatus.NOT_ACCEPTABLE.value());
- map.put("path", ex.uri);
- return map;
- }
-}
diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/advices/ScientifiqueNotFoundAdvice.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/advices/ScientifiqueNotFoundAdvice.java
deleted file mode 100644
index 99e5ae4..0000000
--- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/advices/ScientifiqueNotFoundAdvice.java
+++ /dev/null
@@ -1,27 +0,0 @@
-package fr.iut.sciencequest.sae.exceptions.advices;
-
-import fr.iut.sciencequest.sae.exceptions.IncorrectPageException;
-import org.springframework.http.HttpStatus;
-import org.springframework.web.bind.annotation.ControllerAdvice;
-import org.springframework.web.bind.annotation.ExceptionHandler;
-import org.springframework.web.bind.annotation.ResponseBody;
-import org.springframework.web.bind.annotation.ResponseStatus;
-
-import java.sql.Timestamp;
-import java.util.HashMap;
-import java.util.Map;
-
-@ControllerAdvice
-public class ScientifiqueNotFoundAdvice {
- @ResponseBody
- @ExceptionHandler(IncorrectPageException.class)
- @ResponseStatus(HttpStatus.NOT_FOUND)
- Map exceptionHandler(IncorrectPageException ex) {
- Map map = new HashMap<>();
- map.put("timestamp", String.valueOf(new Timestamp(System.currentTimeMillis())));
- map.put("error", ex.getMessage());
- map.put("status", HttpStatus.NOT_FOUND.value());
- map.put("path", ex.uri);
- return map;
- }
-}
diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/AdminRepository.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/AdminRepository.java
index 241c437..f17aa0d 100644
--- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/AdminRepository.java
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/AdminRepository.java
@@ -2,5 +2,7 @@ package fr.iut.sciencequest.sae.repositories;
import fr.iut.sciencequest.sae.entities.Admin;
import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Repository;
+@Repository
public interface AdminRepository extends CrudRepository {}
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 bc3c4f6..c3a49ec 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
@@ -2,5 +2,7 @@ package fr.iut.sciencequest.sae.repositories;
import fr.iut.sciencequest.sae.entities.Difficulte;
import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Repository;
+@Repository
public interface DifficulteRepository extends CrudRepository {}
\ 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 a0e026a..62fa68b 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
@@ -2,5 +2,10 @@ package fr.iut.sciencequest.sae.repositories;
import fr.iut.sciencequest.sae.entities.Indice;
import org.springframework.data.repository.CrudRepository;
+import org.springframework.data.repository.PagingAndSortingRepository;
+import org.springframework.stereotype.Repository;
-public interface IndiceRepository extends CrudRepository {}
\ No newline at end of file
+@Repository
+public interface IndiceRepository extends PagingAndSortingRepository, CrudRepository {
+
+}
\ No newline at end of file
diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/InviteRepository.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/InviteRepository.java
index 1f4e346..cb89deb 100644
--- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/InviteRepository.java
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/InviteRepository.java
@@ -2,5 +2,7 @@ package fr.iut.sciencequest.sae.repositories;
import fr.iut.sciencequest.sae.entities.Invite;
import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Repository;
+@Repository
public interface InviteRepository extends CrudRepository {}
\ No newline at end of file
diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/JeuRepository.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/JeuRepository.java
index ca5b3ad..5d237b9 100644
--- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/JeuRepository.java
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/JeuRepository.java
@@ -2,5 +2,7 @@ package fr.iut.sciencequest.sae.repositories;
import fr.iut.sciencequest.sae.entities.Jeu;
import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Repository;
+@Repository
public interface JeuRepository extends CrudRepository {}
\ 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 2a9412b..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
@@ -2,5 +2,7 @@ package fr.iut.sciencequest.sae.repositories;
import fr.iut.sciencequest.sae.entities.Joueur;
import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Repository;
+@Repository
public interface JoueurRepository extends CrudRepository {}
diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/PartieRepository.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/PartieRepository.java
index 8129c91..0de5afa 100644
--- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/PartieRepository.java
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/PartieRepository.java
@@ -2,5 +2,7 @@ package fr.iut.sciencequest.sae.repositories;
import fr.iut.sciencequest.sae.entities.Partie;
import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Repository;
+@Repository
public interface PartieRepository extends CrudRepository {}
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 ffd649e..0a5a69e 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
@@ -5,5 +5,7 @@ import org.springframework.data.domain.PageRequest;
import org.springframework.data.domain.Pageable;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.PagingAndSortingRepository;
+import org.springframework.stereotype.Repository;
+@Repository
public interface QuestionRepository extends PagingAndSortingRepository {}
diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/ReponseRepository.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/ReponseRepository.java
index 4a250e1..8eff9b1 100644
--- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/ReponseRepository.java
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/ReponseRepository.java
@@ -2,5 +2,7 @@ package fr.iut.sciencequest.sae.repositories;
import fr.iut.sciencequest.sae.entities.Reponse;
import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Repository;
+@Repository
public interface ReponseRepository extends CrudRepository {}
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 04f1950..c47a28a 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
@@ -3,5 +3,7 @@ package fr.iut.sciencequest.sae.repositories;
import fr.iut.sciencequest.sae.entities.Scientifique;
import org.springframework.data.repository.CrudRepository;
import org.springframework.data.repository.PagingAndSortingRepository;
+import org.springframework.stereotype.Repository;
+@Repository
public interface ScientifiqueRepository extends PagingAndSortingRepository, CrudRepository {}
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 a6a67fd..d57aec4 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
@@ -2,5 +2,8 @@ package fr.iut.sciencequest.sae.repositories;
import fr.iut.sciencequest.sae.entities.Thematique;
import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Repository;
+
+@Repository
public interface ThematiqueRepository extends CrudRepository {}
diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/UtilisateurRepository.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/UtilisateurRepository.java
index 1d98fe5..ec10a32 100644
--- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/UtilisateurRepository.java
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/UtilisateurRepository.java
@@ -2,5 +2,7 @@ package fr.iut.sciencequest.sae.repositories;
import fr.iut.sciencequest.sae.entities.Utilisateur;
import org.springframework.data.repository.CrudRepository;
+import org.springframework.stereotype.Repository;
+@Repository
public interface UtilisateurRepository extends CrudRepository {}
\ No newline at end of file
diff --git a/SpringBootProject/src/main/resources/application.properties b/SpringBootProject/src/main/resources/application.properties
index a5b376c..2e130ca 100644
--- a/SpringBootProject/src/main/resources/application.properties
+++ b/SpringBootProject/src/main/resources/application.properties
@@ -4,4 +4,5 @@ spring.datasource.password=password974519874185$976
spring.datasource.driver-class-name=org.postgresql.Driver
spring.sql.init.mode=always
spring.sql.init.schema-locations=classpath:schema.sql
-spring.jackson.serialization.indent_output = true
\ No newline at end of file
+spring.jackson.serialization.indent_output = true
+server.error.include-message=always
\ No newline at end of file
diff --git a/SpringBootProject/src/main/resources/schema.sql b/SpringBootProject/src/main/resources/schema.sql
index 6f75065..6f13849 100644
--- a/SpringBootProject/src/main/resources/schema.sql
+++ b/SpringBootProject/src/main/resources/schema.sql
@@ -153,6 +153,11 @@ VALUES
('Quel mathématicien a dit : « Dieu existe, c’est les mathématiques » ?'),
('Quel mathématicienne utilisa comme nom d"emprunt « Antoine Auguste Le Blanc » ?');
+-- Indices
+INSERT INTO Indice (id, libelle, idscientifique) VALUES
+ (1, 'Indice pour aider', 1),
+ (2, 'S''appelle Marie', 1);
+
-- Réponses
INSERT INTO Reponse(reponse, idQuestion, idScientifique)
VALUES