forked from tom.biard/ScienceQuest
commit
15b4f3c79c
@ -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)));
|
||||
}
|
||||
}
|
@ -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<Optional<Partie>> getPartie(@PathVariable int id, HttpServletRequest request) {
|
||||
Optional<Partie> 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");
|
||||
}
|
||||
}
|
||||
|
||||
|
||||
}
|
@ -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<EntityModel<Question>> getAllQuestions(@RequestParam(name = "page") Optional<Integer> page, HttpServletRequest request) {
|
||||
try {
|
||||
Pageable paging = PageRequest.of(page.orElse(0), PAGE_SIZE);
|
||||
Page<Question> pagedResult = questionRepository.findAll(paging);
|
||||
|
||||
List<EntityModel<Question>> questions = pagedResult.map(EntityModel::of).toList();
|
||||
|
||||
Link selfLink = linkTo(methodOn(QuestionController.class).getAllQuestions(page, request)).withSelfRel().expand(page.map(Object::toString).orElse("0"));
|
||||
|
||||
CollectionModel<EntityModel<Question>> 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("numéro de page incorrect");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -0,0 +1,118 @@
|
||||
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 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.web.bind.annotation.*;
|
||||
|
||||
import java.util.List;
|
||||
import java.util.Optional;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/v1/scientifiques")
|
||||
public class ScientifiqueController {
|
||||
|
||||
private static final int PAGE_SIZE = 1;
|
||||
|
||||
private final ScientifiqueRepository scientifiqueRepository;
|
||||
private final IndiceRepository indiceRepository;
|
||||
|
||||
public ScientifiqueController(ScientifiqueRepository scientifiqueRepository, IndiceRepository indiceRepository) {
|
||||
this.scientifiqueRepository = scientifiqueRepository;
|
||||
this.indiceRepository = indiceRepository;
|
||||
}
|
||||
|
||||
@GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
public CollectionModel<EntityModel<Scientifique>> getAllScientists(@RequestParam(name = "page") Optional<Integer> page) {
|
||||
try {
|
||||
Pageable paging = PageRequest.of(page.orElse(0), PAGE_SIZE);
|
||||
Page<Scientifique> pagedResult = scientifiqueRepository.findAll(paging);
|
||||
|
||||
List<EntityModel<Scientifique>> scientifiques = pagedResult.map(EntityModel::of).toList();
|
||||
|
||||
Link selfLink = linkTo(methodOn(ScientifiqueController.class).getAllScientists(page)).withSelfRel().expand(page.map(Object::toString).orElse("0"));
|
||||
|
||||
CollectionModel<EntityModel<Scientifique>> result = CollectionModel.of(scientifiques, selfLink);
|
||||
|
||||
if (pagedResult.hasPrevious()) {
|
||||
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(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("numéro de page incorrect");
|
||||
}
|
||||
}
|
||||
|
||||
@GetMapping(value = "/{id}", produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseBody
|
||||
public EntityModel<Optional<Scientifique>> getScientistById(@PathVariable int id) {
|
||||
Optional<Scientifique> scientifiqueOptional = this.scientifiqueRepository.findById(id);
|
||||
Scientifique scientifique = scientifiqueOptional.orElseThrow(() -> new ScientifiqueNotFoundException("Scientifique non trouvé avec l'ID : " + id));
|
||||
|
||||
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<EntityModel<Indice>> getScientistHints(@PathVariable int id, @RequestParam(name = "page") Optional<Integer> page) {
|
||||
try {
|
||||
Pageable paging = PageRequest.of(page.orElse(0), PAGE_SIZE);
|
||||
Page<Indice> pagedResult = indiceRepository.findAll(paging);
|
||||
|
||||
List<EntityModel<Indice>> indices = pagedResult.map(EntityModel::of).toList();
|
||||
|
||||
Link selfLink = linkTo(methodOn(ScientifiqueController.class).getScientistHints(id, page)).withSelfRel().expand(page.map(Object::toString).orElse("0"));
|
||||
|
||||
CollectionModel<EntityModel<Indice>> 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());
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +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.web.bind.annotation.*;
|
||||
|
||||
@RestController
|
||||
@RequestMapping("/api/v1/thematiques")
|
||||
public class ThematiqueController {
|
||||
|
||||
private final ThematiqueRepository thematiqueRepository;
|
||||
|
||||
public ThematiqueController(ThematiqueRepository thematiqueRepository) {
|
||||
this.thematiqueRepository = thematiqueRepository;
|
||||
}
|
||||
|
||||
@GetMapping(produces = MediaType.APPLICATION_JSON_VALUE)
|
||||
@ResponseStatus(HttpStatus.OK)
|
||||
public Iterable<Thematique> getAllThematiques() {
|
||||
return this.thematiqueRepository.findAll();
|
||||
}
|
||||
|
||||
@PostMapping(produces = MediaType.APPLICATION_JSON_VALUE, consumes = MediaType.APPLICATION_JSON_VALUE)
|
||||
@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à");
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,32 @@
|
||||
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;
|
||||
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@Entity
|
||||
@Table(name="admin")
|
||||
public class Admin {
|
||||
@Id
|
||||
@NotNull
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private int id;
|
||||
|
||||
@Email(message="Veuillez fournir une adresse mail valide")
|
||||
@NotNull
|
||||
@NotBlank
|
||||
@Column(unique = true)
|
||||
private String email;
|
||||
|
||||
@NotNull
|
||||
@NotBlank
|
||||
@Column()
|
||||
private String password;
|
||||
}
|
@ -0,0 +1,25 @@
|
||||
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;
|
||||
|
||||
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@Entity
|
||||
@Table(name="difficulte")
|
||||
public class Difficulte {
|
||||
@Id
|
||||
@NotNull
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private int id;
|
||||
|
||||
@NotBlank
|
||||
@Column(unique = true)
|
||||
private String libelle;
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
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;
|
||||
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@Entity
|
||||
@Table(name="indice")
|
||||
public class Indice {
|
||||
@Id
|
||||
@NotNull
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private int id;
|
||||
|
||||
@NotBlank
|
||||
private String libelle;
|
||||
|
||||
@NotNull
|
||||
private int idScientifique;
|
||||
}
|
@ -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{
|
||||
}
|
@ -0,0 +1,30 @@
|
||||
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
|
||||
@Data
|
||||
@Entity
|
||||
@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")
|
||||
@Min(0)
|
||||
private int nbrParties = 0;
|
||||
}
|
@ -0,0 +1,26 @@
|
||||
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;
|
||||
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
@Inheritance ( strategy = InheritanceType.JOINED)
|
||||
@Entity
|
||||
@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;
|
||||
}
|
@ -0,0 +1,36 @@
|
||||
package fr.iut.sciencequest.sae.entities;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
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
|
||||
@NotNull
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private int id;
|
||||
|
||||
@Column(name = "codeinvitation", unique = true)
|
||||
private String codeInvitation;
|
||||
/*private Jeu jeu;
|
||||
@Getter() private Set<Joueur> joueurs;
|
||||
|
||||
public boolean add(Joueur joueur){
|
||||
return this.joueurs.add(joueur);
|
||||
}
|
||||
|
||||
public boolean remove(Joueur joueur){
|
||||
return this.joueurs.remove(joueur);
|
||||
}
|
||||
*/
|
||||
}
|
@ -0,0 +1,28 @@
|
||||
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;
|
||||
|
||||
import java.util.List;
|
||||
|
||||
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
@Entity
|
||||
@Table(name="question")
|
||||
public class Question {
|
||||
@Id
|
||||
@NotNull
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private int id;
|
||||
private String question;
|
||||
|
||||
@NotEmpty
|
||||
@OneToMany(mappedBy = "id")
|
||||
private List<Reponse> reponses;
|
||||
}
|
||||
|
@ -0,0 +1,23 @@
|
||||
package fr.iut.sciencequest.sae.entities;
|
||||
|
||||
import jakarta.persistence.*;
|
||||
import jakarta.validation.constraints.NotNull;
|
||||
import lombok.AllArgsConstructor;
|
||||
import lombok.Data;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@AllArgsConstructor
|
||||
@NoArgsConstructor
|
||||
@Data
|
||||
@Entity
|
||||
@Table(name="reponse")
|
||||
public class Reponse {
|
||||
@Id
|
||||
@NotNull
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private int id;
|
||||
|
||||
@NotNull
|
||||
private String reponse;
|
||||
|
||||
}
|
@ -0,0 +1,58 @@
|
||||
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;
|
||||
import org.hibernate.annotations.Type;
|
||||
|
||||
import java.util.Date;
|
||||
|
||||
@AllArgsConstructor
|
||||
@RequiredArgsConstructor
|
||||
@Data
|
||||
@Entity
|
||||
@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;
|
||||
|
||||
@Column(name = "photo")
|
||||
private String pathToPhoto;
|
||||
|
||||
@NotBlank
|
||||
private String nom;
|
||||
|
||||
@NotBlank
|
||||
private String prenom;
|
||||
|
||||
@NotBlank
|
||||
private String descriptif;
|
||||
|
||||
@NotBlank
|
||||
@Column(name = "datenaissance")
|
||||
private Date dateNaissance;
|
||||
|
||||
@NotBlank
|
||||
@Enumerated(EnumType.STRING)
|
||||
private Sexe sexe;
|
||||
|
||||
@Column(name = "ratiotrouvee")
|
||||
@Size(min=0, max=1)
|
||||
private double ratioTrouve = 0.0;
|
||||
}
|
@ -0,0 +1,6 @@
|
||||
package fr.iut.sciencequest.sae.entities;
|
||||
|
||||
public enum Sexe {
|
||||
F,
|
||||
H
|
||||
}
|
@ -0,0 +1,24 @@
|
||||
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;
|
||||
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@Entity
|
||||
@Table(name="thematique")
|
||||
public class Thematique {
|
||||
@Id
|
||||
@NotNull
|
||||
@GeneratedValue(strategy = GenerationType.IDENTITY)
|
||||
private int id;
|
||||
|
||||
@NotBlank
|
||||
@Column(unique = true)
|
||||
private String libelle;
|
||||
}
|
@ -0,0 +1,29 @@
|
||||
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;
|
||||
import lombok.NoArgsConstructor;
|
||||
|
||||
@EqualsAndHashCode(callSuper = true)
|
||||
@NoArgsConstructor
|
||||
@AllArgsConstructor
|
||||
@Data
|
||||
@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;
|
||||
}
|
||||
|
@ -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);
|
||||
}
|
||||
}
|
@ -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_ACCEPTABLE)
|
||||
public class IncorrectPageException extends RuntimeException {
|
||||
|
||||
public IncorrectPageException(String exception) {
|
||||
super(exception);
|
||||
}
|
||||
}
|
@ -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);
|
||||
}
|
||||
}
|
@ -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 ScientifiqueNotFoundException extends RuntimeException {
|
||||
|
||||
public ScientifiqueNotFoundException(String message) {
|
||||
super(message);
|
||||
}
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
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<Admin, Integer> {}
|
@ -0,0 +1,8 @@
|
||||
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<Difficulte, Integer> {}
|
@ -0,0 +1,11 @@
|
||||
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;
|
||||
|
||||
@Repository
|
||||
public interface IndiceRepository extends PagingAndSortingRepository<Indice, Integer>, CrudRepository<Indice, Integer> {
|
||||
|
||||
}
|
@ -0,0 +1,8 @@
|
||||
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<Invite, Integer> {}
|
@ -0,0 +1,8 @@
|
||||
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<Jeu, Integer> {}
|
@ -0,0 +1,8 @@
|
||||
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<Joueur, Integer> {}
|
@ -0,0 +1,8 @@
|
||||
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<Partie, Integer> {}
|
@ -0,0 +1,11 @@
|
||||
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;
|
||||
import org.springframework.stereotype.Repository;
|
||||
|
||||
@Repository
|
||||
public interface QuestionRepository extends PagingAndSortingRepository<Question, Integer> {}
|
@ -0,0 +1,8 @@
|
||||
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<Reponse, Integer> {}
|
@ -0,0 +1,9 @@
|
||||
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<Scientifique, Integer>, CrudRepository<Scientifique, Integer> {}
|
@ -0,0 +1,9 @@
|
||||
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<Thematique, Integer> {}
|
@ -0,0 +1,8 @@
|
||||
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<Utilisateur, Integer> {}
|
@ -1 +1,8 @@
|
||||
|
||||
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
|
||||
server.error.include-message=always
|
Loading…
Reference in new issue