diff --git a/src/main/java/fr/titionfire/ffsaf/domain/service/MembreService.java b/src/main/java/fr/titionfire/ffsaf/domain/service/MembreService.java index 0c632c7..673e6b9 100644 --- a/src/main/java/fr/titionfire/ffsaf/domain/service/MembreService.java +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/MembreService.java @@ -78,7 +78,8 @@ public class MembreService { final static String FIND_NAME_REQUEST = "unaccent(fname) ILIKE unaccent(?1) OR unaccent(lname) ILIKE unaccent(?1) " + "OR unaccent(fname || ' ' || lname) ILIKE unaccent(?1) OR unaccent(lname || ' ' || fname) ILIKE unaccent(?1)"; - public Uni> searchAdmin(int limit, int page, String search, String club, int licenceRequest) { + public Uni> searchAdmin(int limit, int page, String search, String club, + int licenceRequest) { if (search == null) search = ""; search = "%" + search.replaceAll(" ", "% %") + "%"; @@ -91,9 +92,11 @@ public class MembreService { else if (licenceRequest == 2) baseUni = licenceRepository.list("saison = ?1 AND validate = FALSE", Utils.getSaison()); else if (licenceRequest == 5) - baseUni = licenceRepository.list("saison = ?1 AND validate = FALSE AND LENGTH(certificate) >= 3", Utils.getSaison()); + baseUni = licenceRepository.list("saison = ?1 AND validate = FALSE AND LENGTH(certificate) >= 3", + Utils.getSaison()); else if (licenceRequest == 6) - baseUni = licenceRepository.list("saison = ?1 AND validate = FALSE AND LENGTH(certificate) <= 2", Utils.getSaison()); + baseUni = licenceRepository.list("saison = ?1 AND validate = FALSE AND LENGTH(certificate) <= 2", + Utils.getSaison()); else if (licenceRequest == 3) baseUni = licenceRepository.list("saison = ?1 AND validate = TRUE", Utils.getSaison()); else @@ -128,7 +131,8 @@ public class MembreService { }); } - public Uni> search(int limit, int page, String search, int licenceRequest, String subject) { + public Uni> search(int limit, int page, String search, int licenceRequest, + String subject) { if (search == null) search = ""; search = "%" + search.replaceAll(" ", "% %") + "%"; @@ -141,9 +145,11 @@ public class MembreService { else if (licenceRequest == 2) baseUni = licenceRepository.list("saison = ?1 AND validate = FALSE", Utils.getSaison()); else if (licenceRequest == 5) - baseUni = licenceRepository.list("saison = ?1 AND validate = FALSE AND LENGTH(certificate) >= 3", Utils.getSaison()); + baseUni = licenceRepository.list("saison = ?1 AND validate = FALSE AND LENGTH(certificate) >= 3", + Utils.getSaison()); else if (licenceRequest == 6) - baseUni = licenceRepository.list("saison = ?1 AND validate = FALSE AND LENGTH(certificate) <= 2", Utils.getSaison()); + baseUni = licenceRepository.list("saison = ?1 AND validate = FALSE AND LENGTH(certificate) <= 2", + Utils.getSaison()); else if (licenceRequest == 3) baseUni = licenceRepository.list("saison = ?1 AND validate = TRUE", Utils.getSaison()); else @@ -317,6 +323,11 @@ public class MembreService { public Uni update(long id, FullMemberForm membre) { return update(repository.findById(id) + .call(__ -> repository.count("email LIKE ?1 AND id != ?2", membre.getEmail(), id) + .invoke(Unchecked.consumer(c -> { + if (c > 0) + throw new DBadRequestException("Email déjà utiliser"); + }))) .chain(membreModel -> clubRepository.findById(membre.getClub()) .map(club -> new Pair<>(membreModel, club))) .onItem().transform(pair -> { @@ -334,6 +345,11 @@ public class MembreService { public Uni update(long id, FullMemberForm membre, SecurityCtx securityCtx) { return update(repository.findById(id) + .call(__ -> repository.count("email LIKE ?1 AND id != ?2", membre.getEmail(), id) + .invoke(Unchecked.consumer(c -> { + if (c > 0) + throw new DBadRequestException("Email déjà utiliser"); + }))) .invoke(Unchecked.consumer(membreModel -> { if (!securityCtx.isInClubGroup(membreModel.getClub().getId())) throw new DForbiddenException(); @@ -420,6 +436,10 @@ public class MembreService { public Uni add(FullMemberForm input) { return clubRepository.findById(input.getClub()) + .call(__ -> repository.count("email LIKE ?1", input.getEmail()) + .invoke(Unchecked.consumer(c -> { + if (c > 0) throw new DBadRequestException("Email déjà utiliser"); + }))) .chain(clubModel -> { MembreModel model = getMembreModel(input, clubModel); return Panache.withTransaction(() -> repository.persist(model)); @@ -432,6 +452,10 @@ public class MembreService { public Uni add(FullMemberForm input, String subject) { return repository.find("userId = ?1", subject).firstResult() + .call(__ -> repository.count("email LIKE ?1", input.getEmail()) + .invoke(Unchecked.consumer(c -> { + if (c > 0) throw new DBadRequestException("Email déjà utiliser"); + }))) .call(membreModel -> repository.count( "unaccent(lname) ILIKE unaccent(?2) AND unaccent(fname) ILIKE unaccent(?2) AND club = ?3",