From b89ed62795167cdd3cedfcd7fa3b3034482ea600 Mon Sep 17 00:00:00 2001 From: Thibaut Valentin Date: Wed, 5 Nov 2025 21:18:29 +0100 Subject: [PATCH] feat: add aff req log detail fix: membre import null email filter --- .../ffsaf/data/model/MembreModel.java | 1 + .../domain/service/AffiliationService.java | 13 +++++++ .../ffsaf/domain/service/MembreService.java | 14 ++++++- .../rest/from/AffiliationRequestSaveForm.java | 37 ++++++++++++++++++- 4 files changed, 61 insertions(+), 4 deletions(-) diff --git a/src/main/java/fr/titionfire/ffsaf/data/model/MembreModel.java b/src/main/java/fr/titionfire/ffsaf/data/model/MembreModel.java index b39db64..41642d1 100644 --- a/src/main/java/fr/titionfire/ffsaf/data/model/MembreModel.java +++ b/src/main/java/fr/titionfire/ffsaf/data/model/MembreModel.java @@ -20,6 +20,7 @@ import java.util.List; @RegisterForReflection @Entity +@ToString @Table(name = "membre") public class MembreModel implements LoggableModel { diff --git a/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java b/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java index 70ba494..a2b79a8 100644 --- a/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java @@ -22,6 +22,7 @@ import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import org.eclipse.microprofile.config.inject.ConfigProperty; import org.hibernate.reactive.mutiny.Mutiny; +import org.jboss.logging.Logger; import java.util.ArrayList; import java.util.List; @@ -30,6 +31,7 @@ import java.util.stream.Stream; @WithSession @ApplicationScoped public class AffiliationService { + private static final Logger LOGGER = Logger.getLogger(AffiliationService.class); @Inject CombRepository combRepository; @@ -146,6 +148,9 @@ public class AffiliationService { } public Uni save(AffiliationRequestForm form) { + LOGGER.debug("Affiliation Request Created"); + LOGGER.debug(form.toString()); + // noinspection ResultOfMethodCallIgnored,ReactiveStreamsUnusedPublisher return pre_save(form, true) .chain(model -> Panache.withTransaction(() -> repositoryRequest.persist(model))) @@ -169,6 +174,9 @@ public class AffiliationService { } public Uni saveAdmin(AffiliationRequestSaveForm form) { + LOGGER.debug("Affiliation Request Saved"); + LOGGER.debug(form.toString()); + return repositoryRequest.findById(form.getId()) .onItem().ifNull().failWith(new DNotFoundException("Demande d'affiliation non trouvé")) .map(model -> { @@ -273,6 +281,9 @@ public class AffiliationService { } public Uni accept(AffiliationRequestSaveForm form) { + LOGGER.debug("Affiliation Request Accepted"); + LOGGER.debug(form.toString()); + return repositoryRequest.findById(form.getId()) .onItem().ifNull().failWith(new DNotFoundException("Demande d'affiliation non trouvé")) .chain(req -> @@ -298,6 +309,7 @@ public class AffiliationService { } private Uni acceptNew(AffiliationRequestSaveForm form, AffiliationRequestModel model) { + LOGGER.debug("New Club Accepted"); return Uni.createFrom().nullItem() .chain(() -> { ClubModel club = new ClubModel(); @@ -336,6 +348,7 @@ public class AffiliationService { } private Uni acceptOld(AffiliationRequestSaveForm form, AffiliationRequestModel model, ClubModel club) { + LOGGER.debug("Old Club Accepted"); return Uni.createFrom().nullItem() .chain(() -> { club.setName(form.getName()); 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 d4850a6..2dc7e7a 100644 --- a/src/main/java/fr/titionfire/ffsaf/domain/service/MembreService.java +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/MembreService.java @@ -197,6 +197,11 @@ public class MembreService { return Uni.createFrom().nullItem(); AtomicReference clubModel = new AtomicReference<>(); + LOGGER.debugf("Membre import (size=%d)", data2.size()); + for (SimpleMembreInOutData simpleMembreInOutData : data2) { + LOGGER.debugf("-> %s", simpleMembreInOutData.toString()); + } + return repository.find("userId = ?1", subject).firstResult() .chain(membreModel -> { clubModel.set(membreModel.getClub()); @@ -205,13 +210,15 @@ public class MembreService { return repository.list("licence IN ?1 OR LOWER(lname || ' ' || fname) IN ?2 OR email IN ?3", data2.stream().map(SimpleMembreInOutData::getLicence).filter(Objects::nonNull).toList(), data2.stream().map(o -> (o.getNom() + " " + o.getPrenom()).toLowerCase()).toList(), - data2.stream().map(SimpleMembreInOutData::getEmail).filter(Objects::nonNull).toList()); + data2.stream().map(SimpleMembreInOutData::getEmail).filter(o -> o != null && !o.isBlank()).toList()); }) .call(Unchecked.function(membres -> { for (MembreModel membreModel : membres) { - if (!Objects.equals(membreModel.getClub(), clubModel.get())) + if (!Objects.equals(membreModel.getClub(), clubModel.get())){ + LOGGER.info("Similar membres found: " + membreModel); throw new DForbiddenException( "Le membre n°" + membreModel.getLicence() + " n'appartient pas à votre club"); + } } Uni uniResult = Uni.createFrom().voidItem(); for (SimpleMembreInOutData dataIn : data2) { @@ -229,12 +236,14 @@ public class MembreService { if (model.getEmail() != null) { if (model.getLicence() != null && !model.getLicence().equals(dataIn.getLicence())) { + LOGGER.info("Similar membres found: " + model); throw new DBadRequestException("Email déja utiliser"); } if (StringSimilarity.similarity(model.getLname().toUpperCase(), dataIn.getNom().toUpperCase()) > 3 || StringSimilarity.similarity( model.getFname().toUpperCase(), dataIn.getPrenom().toUpperCase()) > 3) { + LOGGER.info("Similar membres found: " + model); throw new DBadRequestException("Email déja utiliser"); } } @@ -244,6 +253,7 @@ public class MembreService { if ((!add && StringSimilarity.similarity(model.getLname().toUpperCase(), dataIn.getNom().toUpperCase()) > 3) || (!add && StringSimilarity.similarity( model.getFname().toUpperCase(), dataIn.getPrenom().toUpperCase()) > 3)) { + LOGGER.info("Similar membres found: " + model); throw new DBadRequestException( "Pour enregistrer un nouveau membre, veuillez laisser le champ licence vide."); } diff --git a/src/main/java/fr/titionfire/ffsaf/rest/from/AffiliationRequestSaveForm.java b/src/main/java/fr/titionfire/ffsaf/rest/from/AffiliationRequestSaveForm.java index 409fd45..36f62e9 100644 --- a/src/main/java/fr/titionfire/ffsaf/rest/from/AffiliationRequestSaveForm.java +++ b/src/main/java/fr/titionfire/ffsaf/rest/from/AffiliationRequestSaveForm.java @@ -4,12 +4,10 @@ import fr.titionfire.ffsaf.utils.RoleAsso; import jakarta.ws.rs.FormParam; import jakarta.ws.rs.core.MediaType; import lombok.Getter; -import lombok.ToString; import org.eclipse.microprofile.openapi.annotations.media.Schema; import org.jboss.resteasy.reactive.PartType; @Getter -@ToString public class AffiliationRequestSaveForm { @Schema(description = "L'identifiant de l'affiliation.", example = "1", required = true) @FormParam("id") @@ -171,4 +169,39 @@ public class AffiliationRequestSaveForm { } } } + + @Override + public String toString() { + return "AffiliationRequestSaveForm{" + + "id=" + id + + ", name='" + name + '\'' + + ", siret=" + siret + + ", rna='" + rna + '\'' + + ", address='" + address + '\'' + + ", contact='" + contact + '\'' + + ", status_len=" + status.length + + ", logo_len=" + logo.length + + ", m1_mode=" + m1_mode + + ", m1_role=" + m1_role + + ", m1_lincence='" + m1_lincence + '\'' + + ", m1_lname='" + m1_lname + '\'' + + ", m1_fname='" + m1_fname + '\'' + + ", m1_email='" + m1_email + '\'' + + ", m1_email_mode=" + m1_email_mode + + ", m2_mode=" + m2_mode + + ", m2_role=" + m2_role + + ", m2_lincence='" + m2_lincence + '\'' + + ", m2_lname='" + m2_lname + '\'' + + ", m2_fname='" + m2_fname + '\'' + + ", m2_email='" + m2_email + '\'' + + ", m2_email_mode=" + m2_email_mode + + ", m3_mode=" + m3_mode + + ", m3_role=" + m3_role + + ", m3_lincence='" + m3_lincence + '\'' + + ", m3_lname='" + m3_lname + '\'' + + ", m3_fname='" + m3_fname + '\'' + + ", m3_email='" + m3_email + '\'' + + ", m3_email_mode=" + m3_email_mode + + '}'; + } }