Ajout création de partie (belle galère ça)

Springboot
Alix JEUDI--LEMOINE 1 year ago
parent e0ca2c700c
commit 491b9c740e

@ -1,39 +1,70 @@
package fr.iut.sciencequest.sae.services; package fr.iut.sciencequest.sae.services;
import fr.iut.sciencequest.sae.entities.Joueur;
import fr.iut.sciencequest.sae.entities.Partie; import fr.iut.sciencequest.sae.entities.Partie;
import fr.iut.sciencequest.sae.exceptions.MalformedPartyException;
import fr.iut.sciencequest.sae.exceptions.notFound.JeuNotFoundException;
import fr.iut.sciencequest.sae.exceptions.notFound.PartieNotFoundException; import fr.iut.sciencequest.sae.exceptions.notFound.PartieNotFoundException;
import fr.iut.sciencequest.sae.repositories.PartieRepository; import fr.iut.sciencequest.sae.repositories.*;
import jakarta.persistence.EntityManager;
import jakarta.persistence.PersistenceContext;
import lombok.AllArgsConstructor; import lombok.AllArgsConstructor;
import org.springframework.stereotype.Service; import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;
import java.util.Date;
import java.util.List; import java.util.List;
@AllArgsConstructor @AllArgsConstructor
@Service @Service
public class PartieService { public class PartieService {
private final PartieRepository partieRepository; private final PartieRepository partieRepository;
/*private final JeuRepository jeuRepository; private final JeuRepository jeuRepository;
private final JoueurRepository joueurRepository;
private final UtilisateurRepository utilisateurRepository; private final UtilisateurRepository utilisateurRepository;
private final ThematiqueRepository thematiqueRepository; private final ThematiqueRepository thematiqueRepository;
private final DifficulteRepository difficulteRepository;*/ private final DifficulteRepository difficulteRepository;
@PersistenceContext
private EntityManager entityManager;
public Partie findById(int id) { public Partie findById(int id) {
return this.partieRepository.findById(id).orElseThrow(() -> return this.partieRepository.findById(id).orElseThrow(() ->
new PartieNotFoundException("Partie", id) new PartieNotFoundException("Partie", id)
); );
} }
public Partie create(Integer idJeu, Integer idUtilisateur, List<Integer> thematiques, Integer idDifficulte) {
/*try { @Transactional
Jeu jeu = jeuService.findById(idJeu); public Partie create(Integer idJeu, String pseudo, List<Integer> thematiques, Integer idDifficulte) {
// Création du joueur
if(partie.getJeu().getNom() == null) { Joueur joueur = new Joueur();
throw new MalformedPartyException("Party's game id is not given or is a false value"); joueur.setPseudo(pseudo);
}
// Sauvegarder le joueur
return this.partieRepository.save(partie); joueur = joueurRepository.save(joueur);
} catch (DataIntegrityViolationException e) {
throw new DuplicatedFieldException("ERREUR : il existe déjà une partie : " + partie.getId() + " en base"); // Création de la partie
}*/ Partie partie = new Partie(
return new Partie(); 0,
entityManager.createNativeQuery("SELECT make_uid()").getSingleResult().toString(),
List.of(joueur),
jeuRepository.findById(idJeu).orElseThrow(() -> new JeuNotFoundException(idJeu)),
"pending",
new Date()
);
// Sauvegarder la partie pour générer le codeInvitation
partie = partieRepository.save(partie);
// Modification du joueur pour ajouter la partie
entityManager.createNativeQuery("UPDATE joueur SET idpartie = ? WHERE id = ?")
.setParameter(1, partie.getId())
.setParameter(2, joueur.getId())
.executeUpdate();
// Récupérer la partie mise à jour avec le joueur
return partieRepository.findById(partie.getId())
.orElseThrow(MalformedPartyException::new);
} }
} }

Loading…
Cancel
Save