ajout service, controller, entity pour partiekahoot

Springboot
Victor SOULIER 1 year ago
parent 68e6228e4e
commit 649f9431c6

@ -1,6 +1,6 @@
package fr.iut.sciencequest.sae.assemblers;
import fr.iut.sciencequest.sae.controllers.PartieController;
import fr.iut.sciencequest.sae.controllers.PartieKahootController;
import fr.iut.sciencequest.sae.entities.Partie;
import fr.iut.sciencequest.sae.dto.partie.PartieDTO;
import jakarta.annotation.Nullable;
@ -12,7 +12,7 @@ import org.springframework.stereotype.Component;
@Component
public class PartieModelAssembler extends RepresentationModelAssemblerSupport<Partie, PartieDTO> {
public PartieModelAssembler() {
super(PartieController.class, PartieDTO.class);
super(PartieKahootController.class, PartieDTO.class);
}
@Override

@ -4,11 +4,11 @@ import fr.iut.sciencequest.sae.assemblers.PartieModelAssembler;
import fr.iut.sciencequest.sae.controllers.request.PartieAddJoueurRequest;
import fr.iut.sciencequest.sae.controllers.request.PartieRequest;
import fr.iut.sciencequest.sae.dto.partie.PartieDTO;
import fr.iut.sciencequest.sae.dto.partieKahoot.partie.PartieKahootDTO;
import fr.iut.sciencequest.sae.entities.Joueur;
import fr.iut.sciencequest.sae.entities.Partie;
import fr.iut.sciencequest.sae.entities.PartieKahoot;
import fr.iut.sciencequest.sae.entities.Status;
import fr.iut.sciencequest.sae.entities.Thematique;
import fr.iut.sciencequest.sae.exceptions.notFound.PartieNotFoundException;
import fr.iut.sciencequest.sae.exceptions.partie.PartyAlreadyStartedException;
import fr.iut.sciencequest.sae.services.*;
import jakarta.validation.Valid;
@ -19,18 +19,14 @@ import org.springframework.http.MediaType;
import org.springframework.web.bind.annotation.*;
import java.util.ArrayList;
import java.util.HashSet;
import java.util.List;
import java.util.Set;
import static org.springframework.data.jpa.domain.AbstractPersistable_.id;
@RestController
@AllArgsConstructor
@RequestMapping("/api/v1/partie")
public class PartieController {
@RequestMapping("/api/v1/partie/kahoot")
public class PartieKahootController {
private final PartieModelAssembler partieModelAssembler;
private final PartieService partieService;
private final PartieKahootService partieKahootService;
private final JoueurService joueurService;
private final JeuService jeuService;
private final ThematiqueService thematiqueService;
@ -38,16 +34,14 @@ public class PartieController {
private final ModelMapper modelMapper;
@RequestMapping(value = "/{codeInvitation}",method = RequestMethod.GET, produces = MediaType.APPLICATION_JSON_VALUE)
public PartieDTO getPartie(@PathVariable String codeInvitation) {
return partieModelAssembler.toModel(this.partieService.getPartieByIdOrCodeInvitation(codeInvitation));
public PartieKahootDTO getPartie(@PathVariable String codeInvitation) {
return this.modelMapper.map(this.partieKahootService.getPartieKahootByIdOrCodeInvitation(codeInvitation), PartieKahootDTO.class);
}
@RequestMapping(method = RequestMethod.POST, consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(HttpStatus.CREATED)
public PartieDTO createPartie(@RequestBody @Valid PartieRequest request) {
Partie partie = new Partie();
partie.setJeu(this.jeuService.findById(request.getIdJeu()));
public PartieKahootDTO createPartie(@RequestBody @Valid PartieRequest request) {
PartieKahoot partie = new PartieKahoot();
partie.setJoueurs(List.of(this.joueurService.findById(request.getIdJoueur())));
@ -58,20 +52,20 @@ public class PartieController {
partie.setDifficulte(this.difficulteService.findById(request.getIdDifficulte()));
partie = this.partieService.create(partie);
return this.modelMapper.map(partie, PartieDTO.class);
partie = this.partieKahootService.create(partie);
return this.modelMapper.map(partie, PartieKahootDTO.class);
}
@PutMapping(value= "/{codeInvitation}", consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE)
@ResponseStatus(HttpStatus.OK)
public PartieDTO addPlayerToPartie(@PathVariable String codeInvitation, @RequestBody @Valid PartieAddJoueurRequest request){
public PartieKahootDTO addPlayerToPartie(@PathVariable String codeInvitation, @RequestBody @Valid PartieAddJoueurRequest request){
Joueur joueur = this.joueurService.findById(request.getIdJoueur());
Partie partie = this.partieService.getPartieByIdOrCodeInvitation(codeInvitation);
PartieKahoot partie = this.partieKahootService.getPartieKahootByIdOrCodeInvitation(codeInvitation);
if(!partie.getStatus().equals(Status.Pending)) throw new PartyAlreadyStartedException();
if(!partie.getJoueurs().contains(joueur)){
partie.getJoueurs().add(joueur);
}
return this.modelMapper.map(this.partieService.update(partie), PartieDTO.class);
return this.modelMapper.map(this.partieKahootService.update(partie), PartieKahootDTO.class);
}
}

@ -8,8 +8,6 @@ import java.util.List;
@Data
public class PartieRequest {
@NotNull
private Integer idJeu;
@NotNull
private int idJoueur;

@ -0,0 +1,41 @@
package fr.iut.sciencequest.sae.dto.partieKahoot.partie;
import fr.iut.sciencequest.sae.dto.difficulte.DifficulteSimpleDTO;
import fr.iut.sciencequest.sae.dto.jeu.JeuDTO;
import fr.iut.sciencequest.sae.dto.joueur.JoueurSimpleDTO;
import fr.iut.sciencequest.sae.dto.thematique.ThematiqueSimpleDTO;
import fr.iut.sciencequest.sae.entities.Question;
import fr.iut.sciencequest.sae.entities.Status;
import jakarta.validation.constraints.NotEmpty;
import jakarta.validation.constraints.NotNull;
import lombok.*;
import org.springframework.hateoas.RepresentationModel;
import java.util.List;
@Data
@Builder
@NoArgsConstructor
@AllArgsConstructor
@EqualsAndHashCode(callSuper = false)
public class PartieKahootDTO extends RepresentationModel<PartieKahootDTO> {
@NotNull
private Integer id;
@NotEmpty
private String codeInvitation;
@NotEmpty
private List<JoueurSimpleDTO> joueurs;
@NotNull
private JeuDTO jeu;
@NotEmpty
private List<ThematiqueSimpleDTO> thematiques;
@NotNull
private DifficulteSimpleDTO difficulte;
@NotNull
private Status status;
private Question questionActuel;
private List<Question> questions;
}

@ -12,6 +12,7 @@ import java.util.List;
@AllArgsConstructor
@NoArgsConstructor
@Data
@Inheritance(strategy = InheritanceType.JOINED)
@Entity
@Table(name="partie")
public class Partie {
@ -27,10 +28,6 @@ public class Partie {
@JoinColumn(name = "idpartie")
private List<Joueur> joueurs;
@ManyToOne
@JoinColumn(name="idjeu", nullable = false)
private Jeu jeu;
@Column(name = "datecreation") //default value : see Schema.sql
private Date dateCreation;

@ -0,0 +1,34 @@
package fr.iut.sciencequest.sae.entities;
import com.fasterxml.jackson.annotation.JsonManagedReference;
import jakarta.persistence.*;
import lombok.AllArgsConstructor;
import lombok.Data;
import lombok.EqualsAndHashCode;
import lombok.NoArgsConstructor;
import java.util.Date;
import java.util.List;
@EqualsAndHashCode(callSuper = true)
@AllArgsConstructor
@NoArgsConstructor
@Data
@Entity
@Table(name="partiekahoot")
@PrimaryKeyJoinColumn(name = "idpartie")
public class PartieKahoot extends Partie {
@ManyToOne
@JoinColumn(name="idquestionactuel")
private Question questionActuel;
@JsonManagedReference
@ManyToMany(fetch = FetchType.EAGER)
@JoinTable(
name = "Questionpartiekahoot",
joinColumns = @JoinColumn(name = "idpartiekahoot"),
inverseJoinColumns = @JoinColumn(name="idquestion")
)
private List<Question> questions;
}

@ -0,0 +1,17 @@
package fr.iut.sciencequest.sae.exceptions.notFound;
import org.springframework.http.HttpStatus;
import org.springframework.web.bind.annotation.ResponseStatus;
@ResponseStatus(HttpStatus.NOT_FOUND)
public class PartieKahootNotFoundException extends EntityNotFoundException{
private static String entityName = "partieKahoot";
public PartieKahootNotFoundException(int id) {
super(PartieKahootNotFoundException.entityName, id);
}
public PartieKahootNotFoundException(String field, Object value){
super(PartieKahootNotFoundException.entityName, field, value);
}
}

@ -0,0 +1,12 @@
package fr.iut.sciencequest.sae.repositories;
import fr.iut.sciencequest.sae.entities.PartieKahoot;
import org.springframework.data.repository.CrudRepository;
import org.springframework.stereotype.Repository;
import java.util.Optional;
@Repository
public interface PartieKahootRepository extends CrudRepository<PartieKahoot, Integer> {
Optional<PartieKahoot> getPartieByCodeInvitation(String codeInvitation);
}

@ -0,0 +1,61 @@
package fr.iut.sciencequest.sae.services;
import fr.iut.sciencequest.sae.entities.Partie;
import fr.iut.sciencequest.sae.entities.PartieKahoot;
import fr.iut.sciencequest.sae.exceptions.DuplicatedIdException;
import fr.iut.sciencequest.sae.exceptions.notFound.PartieKahootNotFoundException;
import fr.iut.sciencequest.sae.exceptions.notFound.PartieNotFoundException;
import fr.iut.sciencequest.sae.repositories.*;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
@AllArgsConstructor
@Service
public class PartieKahootService {
private final PartieKahootRepository partieKahootRepository;
private final PartieRepository partieRepository;
public PartieKahoot findById(int id) {
return this.partieKahootRepository.findById(id).orElseThrow(() ->
new PartieKahootNotFoundException(id)
);
}
public PartieKahoot getPartieByCodeInvitation(String codeInvitation){
return this.partieKahootRepository.getPartieByCodeInvitation(codeInvitation).orElseThrow(() -> new PartieKahootNotFoundException("codeInvitation", codeInvitation));
}
public PartieKahoot getPartieKahootByIdOrCodeInvitation(String codeInvitation){
//try to get invitation from codeInvitation, if not : try with id
PartieKahoot partie;
try{
partie = this.getPartieByCodeInvitation(codeInvitation);
}catch (PartieKahootNotFoundException exceptionNotFoundByCodeInvitation){
try{
partie = this.findById(Integer.parseInt(codeInvitation));
}catch (PartieKahootNotFoundException | NumberFormatException e2){
throw exceptionNotFoundByCodeInvitation;
}
}
return partie;
}
public PartieKahoot update(PartieKahoot partie){
if(!this.partieRepository.existsById(partie.getId())){
throw new PartieKahootNotFoundException(partie.getId());
}
PartieKahoot savedPartie = this.partieKahootRepository.save(partie);
return this.findById(savedPartie.getId());
}
public PartieKahoot create(PartieKahoot partie){
if(partie.getId() != null && this.partieRepository.existsById(partie.getId())){
throw new DuplicatedIdException();
}
PartieKahoot savedPartie = this.partieKahootRepository.save(partie);
return this.findById(savedPartie.getId());
}
}

@ -1,67 +0,0 @@
package fr.iut.sciencequest.sae.services;
import fr.iut.sciencequest.sae.entities.*;
import fr.iut.sciencequest.sae.exceptions.DuplicatedIdException;
import fr.iut.sciencequest.sae.exceptions.notFound.PartieNotFoundException;
import fr.iut.sciencequest.sae.repositories.*;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service;
@AllArgsConstructor
@Service
public class PartieService {
private final PartieRepository partieRepository;
private final JeuRepository jeuRepository;
private final JoueurRepository joueurRepository;
private final UtilisateurRepository utilisateurRepository;
private final ThematiqueRepository thematiqueRepository;
private final DifficulteRepository difficulteRepository;
private final JoueurService joueurService;
@PersistenceContext
private EntityManager entityManager;
public Partie findById(int id) {
return this.partieRepository.findById(id).orElseThrow(() ->
new PartieNotFoundException(id)
);
}
public Partie getPartieByCodeInvitation(String codeInvitation){
return this.partieRepository.getPartieByCodeInvitation(codeInvitation).orElseThrow(() -> new PartieNotFoundException("codeInvitation", codeInvitation));
}
public Partie getPartieByIdOrCodeInvitation(String codeInvitation){
//try to get invitation from codeInvitation, if not : try with id
Partie partie;
try{
partie = this.getPartieByCodeInvitation(codeInvitation);
}catch (PartieNotFoundException exceptionNotFoundByCodeInvitation){
try{
partie = this.findById(Integer.parseInt(codeInvitation));
}catch (PartieNotFoundException | NumberFormatException e2){
throw exceptionNotFoundByCodeInvitation;
}
}
return partie;
}
public Partie update(Partie partie){
if(!this.partieRepository.existsById(partie.getId())){
throw new PartieNotFoundException(partie.getId());
}
Partie savedPartie = this.partieRepository.save(partie);
return this.findById(savedPartie.getId());
}
public Partie create(Partie partie){
if(partie.getId() != null && this.partieRepository.existsById(partie.getId())){
throw new DuplicatedIdException();
}
Partie savedPartie = this.partieRepository.save(partie);
return this.findById(savedPartie.getId());
}
}

@ -125,7 +125,8 @@ CREATE TABLE Partie(
-- Partie Kahoot
CREATE TABLE PartieKahoot(
idPartie integer PRIMARY KEY REFERENCES Partie(id)
idPartie integer PRIMARY KEY REFERENCES Partie(id),
idQuestionActuel integer REFERENCES Question(id)
);
-- JOUEUR

Loading…
Cancel
Save