diff --git a/SpringBootProject/pom.xml b/SpringBootProject/pom.xml
index df5e722..56c9fab 100644
--- a/SpringBootProject/pom.xml
+++ b/SpringBootProject/pom.xml
@@ -37,6 +37,14 @@
spring-boot-starter-test
test
+
+ org.springframework.boot
+ spring-boot-starter-data-jpa
+
+
+ org.springframework.boot
+ spring-boot-starter-hateoas
+
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 e4c25d6..3595451 100644
--- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/SaeApplication.java
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/SaeApplication.java
@@ -9,5 +9,4 @@ public class SaeApplication {
public static void main(String[] args) {
SpringApplication.run(SaeApplication.class, args);
}
-
}
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
new file mode 100644
index 0000000..852825b
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/QuestionController.java
@@ -0,0 +1,62 @@
+package fr.iut.sciencequest.sae.controllers;
+
+import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;
+
+import fr.iut.sciencequest.sae.entities.Question;
+import fr.iut.sciencequest.sae.exceptions.IncorrectPageException;
+import fr.iut.sciencequest.sae.repositories.QuestionRepository;
+import jakarta.servlet.http.HttpServletRequest;
+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.MediaType;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.Optional;
+import java.util.List;
+
+@Controller
+@RequestMapping("/api/v1/questions")
+public class QuestionController {
+
+ private static final int PAGE_SIZE = 10;
+ private final QuestionRepository questionRepository;
+
+ public QuestionController(QuestionRepository questionRepository) {
+ this.questionRepository = questionRepository;
+ }
+
+ @RequestMapping(method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
+ @ResponseBody
+ public CollectionModel> getAllQuestions(@RequestParam(name = "page") Optional page, HttpServletRequest request) {
+ try {
+ Pageable paging = PageRequest.of(page.orElse(0), PAGE_SIZE);
+ Page pagedResult = questionRepository.findAll(paging);
+
+ List> questions = pagedResult.map(EntityModel::of).toList();
+
+ Link selfLink = linkTo(methodOn(QuestionController.class).getAllQuestions(page, request)).withSelfRel().expand(page.map(Object::toString).orElse("0"));
+
+ CollectionModel> result = CollectionModel.of(questions, selfLink);
+
+ if (pagedResult.hasPrevious()) {
+ Link prevLink = linkTo(methodOn(QuestionController.class).getAllQuestions(Optional.of(pagedResult.previousPageable().getPageNumber()), request)).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");
+ result.add(nextLink.expand(pagedResult.nextPageable().getPageNumber()));
+ }
+
+ return result;
+ } catch (IllegalArgumentException e) {
+ throw new IncorrectPageException(request.getRequestURI(), "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
new file mode 100644
index 0000000..c611094
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/ScientifiqueController.java
@@ -0,0 +1,72 @@
+package fr.iut.sciencequest.sae.controllers;
+
+import static org.springframework.hateoas.server.mvc.WebMvcLinkBuilder.*;
+
+import fr.iut.sciencequest.sae.entities.Scientifique;
+import fr.iut.sciencequest.sae.exceptions.IncorrectPageException;
+import fr.iut.sciencequest.sae.exceptions.ScientifiqueNotFoundException;
+import fr.iut.sciencequest.sae.repositories.ScientifiqueRepository;
+import jakarta.servlet.http.HttpServletRequest;
+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.MediaType;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+import java.util.List;
+import java.util.Optional;
+
+@Controller()
+@RequestMapping("/api/v1/scientifiques")
+public class ScientifiqueController {
+
+ private static final int PAGE_SIZE = 10;
+ private final ScientifiqueRepository scientifiqueRepository;
+
+ public ScientifiqueController(ScientifiqueRepository scientifiqueRepository) {
+ this.scientifiqueRepository = scientifiqueRepository;
+ }
+
+ @RequestMapping(method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
+ @ResponseBody
+ public CollectionModel> getAllScientists(@RequestParam(name = "page") Optional page, HttpServletRequest request) {
+ 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"));
+
+ CollectionModel> result = CollectionModel.of(scientifiques, selfLink);
+
+ if (pagedResult.hasPrevious()) {
+ Link prevLink = linkTo(methodOn(QuestionController.class).getAllQuestions(Optional.of(pagedResult.previousPageable().getPageNumber()), request)).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");
+ result.add(nextLink.expand(pagedResult.nextPageable().getPageNumber()));
+ }
+
+ return result;
+ } catch (IllegalArgumentException e) {
+ throw new IncorrectPageException(request.getRequestURI(), "numéro de page incorrect");
+ }
+ }
+
+ @RequestMapping(value = "/{id}", method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
+ @ResponseBody
+ public EntityModel> getScientistById(@PathVariable int id, HttpServletRequest request) {
+ Optional scientifiqueOptional = this.scientifiqueRepository.findById(id);
+ Scientifique scientifique = scientifiqueOptional.orElseThrow(() -> new ScientifiqueNotFoundException(request.getRequestURI(), "Scientifique non trouvé avec l'ID : " + id));
+
+ Link selfLink = linkTo(methodOn(ScientifiqueController.class).getScientistById(id, request)).withSelfRel();
+ return EntityModel.of(Optional.ofNullable(scientifique), selfLink);
+ }
+}
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
new file mode 100644
index 0000000..96b3d68
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/ThematiqueController.java
@@ -0,0 +1,28 @@
+package fr.iut.sciencequest.sae.controllers;
+
+import fr.iut.sciencequest.sae.entities.Thematique;
+import fr.iut.sciencequest.sae.repositories.ThematiqueRepository;
+import org.springframework.http.MediaType;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.*;
+
+@Controller
+@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
+ public Iterable getAllThematiques() {
+ return this.thematiqueRepository.findAll();
+ }
+
+ @PostMapping(produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
+
+ @ResponseBody
+ public Thematique postThematique(@)
+}
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
new file mode 100644
index 0000000..313fb99
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Admin.java
@@ -0,0 +1,19 @@
+package fr.iut.sciencequest.sae.entities;
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+@Entity
+@Table(name="admin")
+public class Admin {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private int id;
+
+ private String email, 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
new file mode 100644
index 0000000..953c773
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Difficulte.java
@@ -0,0 +1,19 @@
+package fr.iut.sciencequest.sae.entities;
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+@Entity
+@Table(name="difficulte")
+public class Difficulte {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private int id;
+ 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
new file mode 100644
index 0000000..f6bb849
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Indice.java
@@ -0,0 +1,19 @@
+package fr.iut.sciencequest.sae.entities;
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+@Entity
+@Table(name="indice")
+public class Indice {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private int id;
+ private String libelle;
+ //private Scientifique scientifique;
+}
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
new file mode 100644
index 0000000..8c316a7
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Invite.java
@@ -0,0 +1,15 @@
+package fr.iut.sciencequest.sae.entities;
+
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+@EqualsAndHashCode(callSuper = true)
+@AllArgsConstructor
+@Data
+@Entity
+@Table(name = "invite")
+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
new file mode 100644
index 0000000..3bb7ea4
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Jeu.java
@@ -0,0 +1,20 @@
+package fr.iut.sciencequest.sae.entities;
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+@Entity
+@Table(name="jeu")
+public class Jeu {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private int id;
+ private String nom;
+ @Column(name = "nbrparties")
+ private int nbrParties;
+}
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
new file mode 100644
index 0000000..95d40ce
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Joueur.java
@@ -0,0 +1,20 @@
+package fr.iut.sciencequest.sae.entities;
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+@Inheritance ( strategy = InheritanceType.JOINED)
+@Entity
+@Table(name="joueur")
+public abstract class Joueur {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private int id;
+ 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
new file mode 100644
index 0000000..b8a52ae
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Partie.java
@@ -0,0 +1,33 @@
+package fr.iut.sciencequest.sae.entities;
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.Getter;
+import lombok.NoArgsConstructor;
+
+import java.util.Set;
+
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+@Entity
+@Table(name="partie")
+public class Partie {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private int id;
+ @Column(name = "codeinvitation")
+ 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);
+ }
+ */
+}
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
new file mode 100644
index 0000000..26dbf11
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Question.java
@@ -0,0 +1,24 @@
+package fr.iut.sciencequest.sae.entities;
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+import java.util.List;
+
+
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+@Entity
+@Table(name="question")
+public class Question {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private int id;
+ private String question;
+
+ @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
new file mode 100644
index 0000000..ea2033f
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Reponse.java
@@ -0,0 +1,19 @@
+package fr.iut.sciencequest.sae.entities;
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@AllArgsConstructor
+@NoArgsConstructor
+@Data
+@Entity
+@Table(name="reponse")
+public class Reponse {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private int id;
+ 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
new file mode 100644
index 0000000..6665ea9
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Scientifique.java
@@ -0,0 +1,41 @@
+package fr.iut.sciencequest.sae.entities;
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.RequiredArgsConstructor;
+import org.hibernate.annotations.Type;
+
+import java.util.Date;
+
+@AllArgsConstructor
+@RequiredArgsConstructor
+@Data
+@Entity
+@Table(name = "scientifique")
+public class Scientifique {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private int id;
+
+ @ManyToOne
+ @JoinColumn(name="iddifficulte")
+ private Difficulte difficulte;
+
+ @ManyToOne
+ @JoinColumn(name="idthematique")
+ private Thematique thematique;
+
+ @Column(name = "photo")
+ private String pathToPhoto;
+
+ private String nom, prenom, descriptif;
+
+ @Column(name = "datenaissance")
+ private Date dateNaissance;
+
+ private char sexe;
+
+ @Column(name = "ratiotrouvee")
+ private double ratioTrouve;
+}
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
new file mode 100644
index 0000000..75b3a51
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Thematique.java
@@ -0,0 +1,18 @@
+package fr.iut.sciencequest.sae.entities;
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.NoArgsConstructor;
+
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+@Entity
+@Table(name="thematique")
+public class Thematique {
+ @Id
+ @GeneratedValue(strategy = GenerationType.IDENTITY)
+ private int id;
+ 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
new file mode 100644
index 0000000..a580fc4
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/entities/Utilisateur.java
@@ -0,0 +1,22 @@
+package fr.iut.sciencequest.sae.entities;
+
+
+import jakarta.persistence.*;
+import lombok.AllArgsConstructor;
+import lombok.Data;
+import lombok.EqualsAndHashCode;
+import lombok.NoArgsConstructor;
+
+@EqualsAndHashCode(callSuper = true)
+@NoArgsConstructor
+@AllArgsConstructor
+@Data
+@Entity
+@Table(name="utilisateur")
+public class Utilisateur extends Joueur{
+ private String email;
+ @Column(name = "motdepasse")
+ private String motDePasse;
+ private String pseudo;
+}
+
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
new file mode 100644
index 0000000..9a807bf
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/IncorrectPageException.java
@@ -0,0 +1,9 @@
+package fr.iut.sciencequest.sae.exceptions;
+
+public class IncorrectPageException extends RuntimeException {
+ public final String uri;
+ public IncorrectPageException(String uri, String exception) {
+ super(exception);
+ this.uri = uri;
+ }
+}
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
new file mode 100644
index 0000000..dbe86ec
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/ScientifiqueNotFoundException.java
@@ -0,0 +1,10 @@
+package fr.iut.sciencequest.sae.exceptions;
+
+public class ScientifiqueNotFoundException extends RuntimeException {
+ public final String uri;
+
+ public ScientifiqueNotFoundException(String uri, String exception) {
+ super(exception);
+ this.uri = uri;
+ }
+}
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
new file mode 100644
index 0000000..30ea8b5
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/advices/IncorrectPageAdvice.java
@@ -0,0 +1,27 @@
+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
new file mode 100644
index 0000000..99e5ae4
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/advices/ScientifiqueNotFoundAdvice.java
@@ -0,0 +1,27 @@
+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
new file mode 100644
index 0000000..241c437
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/AdminRepository.java
@@ -0,0 +1,6 @@
+package fr.iut.sciencequest.sae.repositories;
+
+import fr.iut.sciencequest.sae.entities.Admin;
+import org.springframework.data.repository.CrudRepository;
+
+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
new file mode 100644
index 0000000..bc3c4f6
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/DifficulteRepository.java
@@ -0,0 +1,6 @@
+package fr.iut.sciencequest.sae.repositories;
+
+import fr.iut.sciencequest.sae.entities.Difficulte;
+import org.springframework.data.repository.CrudRepository;
+
+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
new file mode 100644
index 0000000..a0e026a
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/IndiceRepository.java
@@ -0,0 +1,6 @@
+package fr.iut.sciencequest.sae.repositories;
+
+import fr.iut.sciencequest.sae.entities.Indice;
+import org.springframework.data.repository.CrudRepository;
+
+public interface IndiceRepository extends 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
new file mode 100644
index 0000000..1f4e346
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/InviteRepository.java
@@ -0,0 +1,6 @@
+package fr.iut.sciencequest.sae.repositories;
+
+import fr.iut.sciencequest.sae.entities.Invite;
+import org.springframework.data.repository.CrudRepository;
+
+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
new file mode 100644
index 0000000..ca5b3ad
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/JeuRepository.java
@@ -0,0 +1,6 @@
+package fr.iut.sciencequest.sae.repositories;
+
+import fr.iut.sciencequest.sae.entities.Jeu;
+import org.springframework.data.repository.CrudRepository;
+
+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
new file mode 100644
index 0000000..2a9412b
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/JoueurRepository.java
@@ -0,0 +1,6 @@
+package fr.iut.sciencequest.sae.repositories;
+
+import fr.iut.sciencequest.sae.entities.Joueur;
+import org.springframework.data.repository.CrudRepository;
+
+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
new file mode 100644
index 0000000..8129c91
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/PartieRepository.java
@@ -0,0 +1,6 @@
+package fr.iut.sciencequest.sae.repositories;
+
+import fr.iut.sciencequest.sae.entities.Partie;
+import org.springframework.data.repository.CrudRepository;
+
+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
new file mode 100644
index 0000000..ffd649e
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/QuestionRepository.java
@@ -0,0 +1,9 @@
+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.repository.CrudRepository;
+import org.springframework.data.repository.PagingAndSortingRepository;
+
+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
new file mode 100644
index 0000000..4a250e1
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/ReponseRepository.java
@@ -0,0 +1,6 @@
+package fr.iut.sciencequest.sae.repositories;
+
+import fr.iut.sciencequest.sae.entities.Reponse;
+import org.springframework.data.repository.CrudRepository;
+
+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
new file mode 100644
index 0000000..04f1950
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/ScientifiqueRepository.java
@@ -0,0 +1,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;
+
+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
new file mode 100644
index 0000000..a6a67fd
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/ThematiqueRepository.java
@@ -0,0 +1,6 @@
+package fr.iut.sciencequest.sae.repositories;
+
+import fr.iut.sciencequest.sae.entities.Thematique;
+import org.springframework.data.repository.CrudRepository;
+
+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
new file mode 100644
index 0000000..1d98fe5
--- /dev/null
+++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/UtilisateurRepository.java
@@ -0,0 +1,6 @@
+package fr.iut.sciencequest.sae.repositories;
+
+import fr.iut.sciencequest.sae.entities.Utilisateur;
+import org.springframework.data.repository.CrudRepository;
+
+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 8b13789..a5b376c 100644
--- a/SpringBootProject/src/main/resources/application.properties
+++ b/SpringBootProject/src/main/resources/application.properties
@@ -1 +1,7 @@
-
+spring.datasource.url=jdbc:postgresql://localhost:5432/postgres
+spring.datasource.username=iut
+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
diff --git a/SpringBootProject/src/main/resources/schema.sql b/SpringBootProject/src/main/resources/schema.sql
new file mode 100644
index 0000000..6f75065
--- /dev/null
+++ b/SpringBootProject/src/main/resources/schema.sql
@@ -0,0 +1,171 @@
+-- Testé sous pgsql 15
+
+DROP TABLE IF EXISTS Reponse CASCADE;
+DROP TABLE IF EXISTS Question CASCADE;
+DROP TABLE IF EXISTS Admin CASCADE;
+DROP TABLE IF EXISTS Partie CASCADE;
+DROP TABLE IF EXISTS Jeu CASCADE;
+DROP TABLE IF EXISTS Decouvrir CASCADE;
+DROP TABLE IF EXISTS Utilisateur CASCADE;
+DROP TABLE IF EXISTS Invite CASCADE;
+DROP TABLE IF EXISTS Joueur CASCADE;
+DROP TABLE IF EXISTS Indice CASCADE;
+DROP TABLE IF EXISTS Scientifique CASCADE;
+DROP TABLE IF EXISTS Thematique CASCADE;
+DROP TABLE IF EXISTS Difficulte;
+
+
+-- THEMATIQUE
+
+CREATE TABLE Thematique(
+ id SERIAL PRIMARY KEY,
+ libelle varchar(128) NOT NULL UNIQUE
+);
+
+
+-- DIFFICULTE
+
+CREATE TABLE Difficulte(
+ id SERIAL PRIMARY KEY,
+ libelle varchar(128) NOT NULL UNIQUE
+);
+
+
+-- SCIENTIFIQUE
+
+CREATE TABLE Scientifique(
+ id SERIAL PRIMARY KEY,
+ nom varchar(128) NOT NULL,
+ prenom varchar(128) NOT NULL,
+ photo varchar(512) NOT NULL,
+ dateNaissance date NOT NULL,
+ descriptif text NOT NULL,
+ ratioTrouvee numeric(5,4),
+ sexe char(1) NOT NULL CHECK(sexe IN ('F', 'H')),
+ idThematique integer REFERENCES Thematique(id),
+ idDifficulte integer REFERENCES Difficulte(id)
+);
+
+
+-- INDICE
+
+CREATE TABLE Indice(
+ id SERIAL PRIMARY KEY,
+ libelle varchar(512) NOT NULL UNIQUE,
+ idScientifique integer REFERENCES Scientifique(id)
+);
+
+-- QUESTION
+
+CREATE TABLE Question(
+ id SERIAL PRIMARY KEY,
+ question varchar(256) NOT NULL UNIQUE
+);
+
+
+-- REPONSE
+
+CREATE TABLE Reponse(
+ id SERIAL PRIMARY KEY,
+ reponse varchar(255) NOT NULL,
+ idQuestion integer REFERENCES Question(id),
+ idScientifique integer REFERENCES Scientifique(id)
+);
+
+
+-- ADMIN
+
+CREATE TABLE Admin(
+ id SERIAL PRIMARY KEY,
+ email varchar(255) NOT NULL UNIQUE,
+ password varchar(255) NOT NULL
+);
+
+-- Jeu
+
+CREATE TABLE Jeu(
+ id SERIAL PRIMARY KEY,
+ nom varchar(128) NOT NULL UNIQUE,
+ nbrParties integer NOT NULL DEFAULT 0
+);
+
+
+-- Partie
+
+CREATE TABLE Partie(
+ id SERIAL PRIMARY KEY,
+ codeInvitation varchar(10) NOT NULL UNIQUE,
+ idJeu integer REFERENCES Jeu(id)
+);
+
+-- JOUEUR
+
+CREATE TABLE Joueur(
+ id SERIAL PRIMARY KEY,
+ idPartie integer REFERENCES Partie(id),
+ pseudo varchar(255) NOT NULL UNIQUE
+);
+
+
+-- Invite
+
+CREATE TABLE Invite(
+ idJoueur integer PRIMARY KEY REFERENCES Joueur(id)
+);
+
+
+-- Utilisateur
+
+CREATE TABLE Utilisateur(
+ idJoueur integer PRIMARY KEY REFERENCES Joueur(id),
+ email varchar(255) NOT NULL UNIQUE,
+ password varchar(255) NOT NULL
+);
+
+
+-- Decouvrir
+
+CREATE TABLE Decouvrir(
+ idUtilisateur integer REFERENCES Utilisateur(idJoueur),
+ idScientifique integer REFERENCES Scientifique(id),
+ PRIMARY KEY (idUtilisateur, idScientifique)
+);
+
+
+-- INSERTS
+
+-- Scientifiques
+INSERT INTO Difficulte(libelle) VALUES ('Facile'),('Intermédiaire'),('Difficile');
+INSERT INTO Thematique(libelle) VALUES ('Nucléaire'),('Mathématiques');
+INSERT INTO Scientifique(nom, prenom, photo, dateNaissance, descriptif, ratioTrouvee, idThematique, idDifficulte, sexe)
+VALUES
+ ('Marie', 'Curie', '', CURRENT_DATE, 'desc', 0, 1, 1, 'F'),
+ ('Albert', 'Einstein', '', CURRENT_DATE, 'desc', 0, 2, 1, 'H'),
+ ('Sophie', 'Germain', '', CURRENT_DATE, 'desc', 0, 2, 2, 'F');
+
+-- Jeu
+INSERT INTO Jeu(nom) VALUES ('Qui-est-ce ?'),('Science Quizz'), ('Pendu');
+
+-- Questions
+INSERT INTO Question(question)
+VALUES
+ ('Qui a reçu le prix Nobel de chimie en 1911, pour avoir réussi à isoler un gramme de radium ?'),
+ ('Quel mathématicien a dit : « Dieu existe, c’est les mathématiques » ?'),
+ ('Quel mathématicienne utilisa comme nom d"emprunt « Antoine Auguste Le Blanc » ?');
+
+-- Réponses
+INSERT INTO Reponse(reponse, idQuestion, idScientifique)
+VALUES
+ ('Marie Curie', 1, 1),
+ ('Albert Einstein', 2, 2),
+ ('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');
+-- mdp = test
+
+INSERT INTO decouvrir(idUtilisateur,idScientifique) VALUES (1337,1);
+
+INSERT INTO Admin(id,email,password) VALUES (1, 'admin','$2y$10$juGnlWC9cS19popEKLZsYeir0Jl39k6hDl0dpaCix00FDcdiEbtmS');
+-- mdp = test