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