diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/InviteController.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/InviteController.java index 9d0d81d..5abdf85 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/InviteController.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/controllers/InviteController.java @@ -1,9 +1,14 @@ package fr.iut.sciencequest.sae.controllers; +import fr.iut.sciencequest.sae.dto.invite.InviteDTO; +import fr.iut.sciencequest.sae.dto.invite.InviteSimpleDTO; import fr.iut.sciencequest.sae.dto.invite.InviteWithPseudoOnlyDTO; +import fr.iut.sciencequest.sae.entities.Invite; import fr.iut.sciencequest.sae.services.InviteService; import jakarta.validation.Valid; import lombok.AllArgsConstructor; +import org.modelmapper.ModelMapper; +import org.springframework.http.HttpStatus; import org.springframework.http.MediaType; import org.springframework.web.bind.annotation.*; @@ -14,4 +19,12 @@ import java.util.HashMap; @RequestMapping("/api/v1/invite") public class InviteController { private final InviteService inviteService; + private final ModelMapper modelMapper; + + @PostMapping(consumes = MediaType.APPLICATION_JSON_VALUE, produces = MediaType.APPLICATION_JSON_VALUE) + @ResponseStatus(HttpStatus.CREATED) + public InviteSimpleDTO createInvite(@RequestBody @Valid InviteWithPseudoOnlyDTO inviteRequest){ + Invite invite = this.modelMapper.map(inviteRequest, Invite.class); + return this.modelMapper.map(this.inviteService.create(invite), InviteSimpleDTO.class); + } } diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/invite/InviteSimpleDTO.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/invite/InviteSimpleDTO.java new file mode 100644 index 0000000..ddb6731 --- /dev/null +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/dto/invite/InviteSimpleDTO.java @@ -0,0 +1,23 @@ +package fr.iut.sciencequest.sae.dto.invite; + +import com.fasterxml.jackson.annotation.JsonInclude; +import fr.iut.sciencequest.sae.dto.partie.PartieDTO; +import jakarta.validation.constraints.NotBlank; +import jakarta.validation.constraints.NotNull; +import lombok.*; +import org.springframework.hateoas.RepresentationModel; + + +@Data +@Builder +@NoArgsConstructor +@AllArgsConstructor +@EqualsAndHashCode(callSuper = false) +@JsonInclude(JsonInclude.Include.NON_NULL) +public class InviteSimpleDTO extends RepresentationModel { + @NotNull + private Integer id; + + @NotBlank + private String pseudo; +} diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/notFound/InviteNotFoundException.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/notFound/InviteNotFoundException.java index 435be02..b036d48 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/notFound/InviteNotFoundException.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/exceptions/notFound/InviteNotFoundException.java @@ -5,7 +5,7 @@ import org.springframework.web.bind.annotation.ResponseStatus; @ResponseStatus(HttpStatus.NOT_FOUND) public class InviteNotFoundException extends EntityNotFoundException{ - public InviteNotFoundException(String id) { + public InviteNotFoundException(int id) { super("Invite", id); } } 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 index 61ae108..9fe0e72 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/JoueurRepository.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/repositories/JoueurRepository.java @@ -5,4 +5,6 @@ import org.springframework.data.repository.CrudRepository; import org.springframework.stereotype.Repository; @Repository -public interface JoueurRepository extends CrudRepository {} +public interface JoueurRepository extends CrudRepository { + boolean existsByPseudo(String pseudo); +} diff --git a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/InviteService.java b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/InviteService.java index 38bfdc5..1858398 100644 --- a/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/InviteService.java +++ b/SpringBootProject/src/main/java/fr/iut/sciencequest/sae/services/InviteService.java @@ -1,20 +1,43 @@ 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.exceptions.partie.PartyAlreadyStartedException; +import fr.iut.sciencequest.sae.entities.Invite; +import fr.iut.sciencequest.sae.entities.Thematique; +import fr.iut.sciencequest.sae.exceptions.DuplicatedFieldException; +import fr.iut.sciencequest.sae.exceptions.DuplicatedIdException; import fr.iut.sciencequest.sae.exceptions.notFound.InviteNotFoundException; +import fr.iut.sciencequest.sae.exceptions.notFound.ThematiqueNotFoundException; +import fr.iut.sciencequest.sae.repositories.InviteRepository; import fr.iut.sciencequest.sae.repositories.JoueurRepository; -import fr.iut.sciencequest.sae.repositories.PartieRepository; -import jakarta.persistence.EntityManager; -import jakarta.persistence.PersistenceContext; +import fr.iut.sciencequest.sae.repositories.ThematiqueRepository; import lombok.AllArgsConstructor; +import org.springframework.data.domain.Page; +import org.springframework.data.domain.Pageable; import org.springframework.stereotype.Service; -import org.springframework.transaction.annotation.Transactional; - -import java.util.HashMap; @AllArgsConstructor @Service public class InviteService { + private final InviteRepository inviteRepository; + private final JoueurRepository joueurRepository; + + private void checkFieldsConstraints(Invite invite){ + if(this.joueurRepository.existsByPseudo(invite.getPseudo())){ + throw new DuplicatedFieldException("pseudo"); + } + } + public Invite update(Invite invite){ + if(!this.joueurRepository.existsById(invite.getId())){ + throw new InviteNotFoundException(invite.getId()); + } + this.checkFieldsConstraints(invite); + return this.inviteRepository.save(invite); + } + + public Invite create(Invite invite){ + if(invite.getId() != null && this.joueurRepository.existsById(invite.getId())){ + throw new DuplicatedIdException(); + } + this.checkFieldsConstraints(invite); + return this.inviteRepository.save(invite); + } }