diff --git a/src/main/java/io/gmss/fiscad/entities/infocad/metier/Enquete.java b/src/main/java/io/gmss/fiscad/entities/infocad/metier/Enquete.java index 70d80ff..e779424 100644 --- a/src/main/java/io/gmss/fiscad/entities/infocad/metier/Enquete.java +++ b/src/main/java/io/gmss/fiscad/entities/infocad/metier/Enquete.java @@ -27,6 +27,7 @@ import lombok.AllArgsConstructor; import lombok.Data; import lombok.EqualsAndHashCode; import lombok.NoArgsConstructor; +import org.hibernate.annotations.Formula; import java.io.Serializable; import java.time.LocalDate; @@ -183,6 +184,14 @@ public class Enquete extends BaseEntity implements Serializable { private Integer nbreIndivisiaire; private String autreAdresse; private Float superficie ; + @Formula(""" + ( + SELECT COUNT(DISTINCT (bat.id)) + FROM enquete e + join batiment bat on bat.parcelle_id =e.parcelle_id + WHERE bat.parcelle_id = parcelle_id + ) + """) private Integer nbreBatiment; private Integer nbrePiscine; private Long montantMensuelleLocation; diff --git a/src/main/java/io/gmss/fiscad/entities/rfu/metier/Participer.java b/src/main/java/io/gmss/fiscad/entities/rfu/metier/Participer.java index d121a29..f08bd1b 100644 --- a/src/main/java/io/gmss/fiscad/entities/rfu/metier/Participer.java +++ b/src/main/java/io/gmss/fiscad/entities/rfu/metier/Participer.java @@ -22,7 +22,15 @@ import java.time.LocalDate; @Data @NoArgsConstructor @AllArgsConstructor -@Where(clause = " deleted = false") +//@Where(clause = " deleted = false") +@Table( + uniqueConstraints = { + @UniqueConstraint( + name = "uk_participer_equipe_user", + columnNames = {"equipe_id", "user_id"} + ) + } +) public class Participer extends BaseEntity implements Serializable { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) diff --git a/src/main/java/io/gmss/fiscad/implementations/rfu/metier/ParticiperServiceImpl.java b/src/main/java/io/gmss/fiscad/implementations/rfu/metier/ParticiperServiceImpl.java index 05ee022..ae785bb 100644 --- a/src/main/java/io/gmss/fiscad/implementations/rfu/metier/ParticiperServiceImpl.java +++ b/src/main/java/io/gmss/fiscad/implementations/rfu/metier/ParticiperServiceImpl.java @@ -2,6 +2,7 @@ package io.gmss.fiscad.implementations.rfu.metier; import io.gmss.fiscad.entities.infocad.metier.Parcelle; import io.gmss.fiscad.entities.rfu.metier.Participer; +import io.gmss.fiscad.exceptions.ApplicationException; import io.gmss.fiscad.exceptions.BadRequestException; import io.gmss.fiscad.exceptions.NotFoundException; import io.gmss.fiscad.interfaces.rfu.metier.ParticiperService; @@ -41,12 +42,22 @@ public class ParticiperServiceImpl implements ParticiperService { throw new BadRequestException("Impossible de créer la participation: L'équipe doit être précisée."); } + + if (participerPaylaodWeb.getUserId() == null) { throw new BadRequestException("Impossible de créer la participation : Le participant doit être précisé."); }else { if(!userRepository.existsById(participerPaylaodWeb.getUserId())) throw new BadRequestException("Impossible de créer un nouveau participer: Le participant doit être précisé."); } + + if (participerRepository.existsByEquipeIdAndUserId( + participerPaylaodWeb.getEquipeId(), + participerPaylaodWeb.getUserId())) { + throw new ApplicationException("Cet utilisateur participe déjà à cette équipe."); + } + + Participer participer= entityFromPayLoadService.getParticiperFromPayLoadWeb(participerPaylaodWeb); participer= participerRepository.save(participer); diff --git a/src/main/java/io/gmss/fiscad/persistence/repositories/rfu/metier/ParticiperRepository.java b/src/main/java/io/gmss/fiscad/persistence/repositories/rfu/metier/ParticiperRepository.java index 465939d..74f9232 100644 --- a/src/main/java/io/gmss/fiscad/persistence/repositories/rfu/metier/ParticiperRepository.java +++ b/src/main/java/io/gmss/fiscad/persistence/repositories/rfu/metier/ParticiperRepository.java @@ -12,6 +12,7 @@ import java.util.List; import java.util.Optional; public interface ParticiperRepository extends JpaRepository { + boolean existsByEquipeIdAndUserId(Long equipeId, Long userId); @Query(""" SELECT new io.gmss.fiscad.paylaods.request.crudweb.ParticiperPayloadWeb( p.id,