From 7d35472ea556c11ac51c440a8eaa55f217ee5b32 Mon Sep 17 00:00:00 2001 From: Thibaut Valentin Date: Wed, 5 Feb 2025 11:12:43 +0100 Subject: [PATCH 1/6] fix(aff): licence number parsing --- .../fr/titionfire/ffsaf/rest/from/AffiliationRequestForm.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/main/java/fr/titionfire/ffsaf/rest/from/AffiliationRequestForm.java b/src/main/java/fr/titionfire/ffsaf/rest/from/AffiliationRequestForm.java index 985510c..494acad 100644 --- a/src/main/java/fr/titionfire/ffsaf/rest/from/AffiliationRequestForm.java +++ b/src/main/java/fr/titionfire/ffsaf/rest/from/AffiliationRequestForm.java @@ -125,14 +125,14 @@ public class AffiliationRequestForm { model.setM2_lname(this.getM2_lname()); model.setM2_fname(this.getM2_fname()); model.setM2_email(this.getM2_email()); - model.setM2_lincence((this.getM1_lincence() == null || this.getM1_lincence().isBlank()) + model.setM2_lincence((this.getM2_lincence() == null || this.getM2_lincence().isBlank()) ? -1 : Integer.parseInt(this.getM2_lincence())); model.setM2_role(this.getM2_role()); model.setM3_lname(this.getM3_lname()); model.setM3_fname(this.getM3_fname()); model.setM3_email(this.getM3_email()); - model.setM3_lincence((this.getM1_lincence() == null || this.getM1_lincence().isBlank()) + model.setM3_lincence((this.getM3_lincence() == null || this.getM3_lincence().isBlank()) ? -1 : Integer.parseInt(this.getM3_lincence())); model.setM3_role(this.getM3_role()); From 972d5996429f838eb5a234980f0f80f02ded9043 Mon Sep 17 00:00:00 2001 From: Thibaut Valentin Date: Wed, 5 Feb 2025 11:21:46 +0100 Subject: [PATCH 2/6] fix(aff): lazy loading on licence in validation aff req --- .../domain/service/AffiliationService.java | 34 ++++++++++--------- 1 file changed, 18 insertions(+), 16 deletions(-) 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 dc40d66..10a38a6 100644 --- a/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java @@ -240,10 +240,11 @@ public class AffiliationService { .call(m -> ((m.getUserId() == null) ? keycloakService.initCompte(m.getId()) : keycloakService.setClubGroupMembre(m, club).map(__ -> m.getUserId())) .call(userId -> keycloakService.setAutoRoleMembre(userId, m.getRole(), m.getGrade_arbitrage()))) - .call(m -> m.getLicences().stream().anyMatch(l -> l.getSaison() == saison) ? - Uni.createFrom().nullItem() : - Panache.withTransaction(() -> licenceRepository.persist( - new LicenceModel(null, m, saison, null, true)))); + .call(m -> Mutiny.fetch(m.getLicences()) + .call(l1 -> l1.stream().anyMatch(l -> l.getSaison() == saison) ? + Uni.createFrom().nullItem() : + Panache.withTransaction(() -> licenceRepository.persist( + new LicenceModel(null, m, saison, null, true))))); } public Uni accept(AffiliationRequestSaveForm form) { @@ -292,18 +293,19 @@ public class AffiliationService { }) .call(club -> reactiveMailer.send( Mail.withText(form.getM1_email(), - "FFSAF - Acceptation de votre demande d'affiliation", - String.format( - """ - Bonjour, - - Votre demande d'affiliation pour le club %s a été acceptée. - Le numéro d'affiliation de votre club est le %d. - - Cordialement, - L'équipe de la FFSAF - """, club.getName(), club.getNo_affiliation()) - ).setFrom("FFSAF ").setReplyTo("contact@ffsaf.fr").addTo(form.getM2_email(), form.getM3_email()) + "FFSAF - Acceptation de votre demande d'affiliation", + String.format( + """ + Bonjour, + + Votre demande d'affiliation pour le club %s a été acceptée. + Le numéro d'affiliation de votre club est le %d. + + Cordialement, + L'équipe de la FFSAF + """, club.getName(), club.getNo_affiliation()) + ).setFrom("FFSAF ").setReplyTo("contact@ffsaf.fr") + .addTo(form.getM2_email(), form.getM3_email()) )); } From 3869ad50e995d93735b3c861b0649802e372b88d Mon Sep 17 00:00:00 2001 From: Thibaut Valentin Date: Wed, 5 Feb 2025 11:38:18 +0100 Subject: [PATCH 3/6] fix(me): access to photo --- .../ffsaf/domain/service/MembreService.java | 4 ++++ .../titionfire/ffsaf/rest/MembreEndpoints.java | 17 ++++++++++++++++- src/main/webapp/src/pages/MePage.jsx | 2 +- 3 files changed, 21 insertions(+), 2 deletions(-) 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 50fe6d8..af3415d 100644 --- a/src/main/java/fr/titionfire/ffsaf/domain/service/MembreService.java +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/MembreService.java @@ -131,6 +131,10 @@ public class MembreService { .call(m -> Mutiny.fetch(m.getLicences())); } + public Uni getByAccountId(String subject) { + return repository.find("userId = ?1", subject).firstResult(); + } + public Uni getByLicence(long licence) { return repository.find("licence = ?1", licence).firstResult(); } diff --git a/src/main/java/fr/titionfire/ffsaf/rest/MembreEndpoints.java b/src/main/java/fr/titionfire/ffsaf/rest/MembreEndpoints.java index 138cf68..1227bd7 100644 --- a/src/main/java/fr/titionfire/ffsaf/rest/MembreEndpoints.java +++ b/src/main/java/fr/titionfire/ffsaf/rest/MembreEndpoints.java @@ -98,7 +98,7 @@ public class MembreEndpoints { @Authenticated @Produces(MediaType.APPLICATION_JSON) @Operation(summary = "Renvoie l'attestation d'adhesion du membre connecté", description = "Renvoie l'attestation d'adhesion du " + - "membre connecté, y compris le club et les licences") + "membre connecté") @APIResponses(value = { @APIResponse(responseCode = "200", description = "L'attestation d'adhesion"), @APIResponse(responseCode = "403", description = "Accès refusé"), @@ -109,6 +109,21 @@ public class MembreEndpoints { return membreService.getLicencePdf(securityCtx.getSubject()); } + @GET + @Path("me/photo") + @Authenticated + @Operation(summary = "Renvoie la photo du membre connecté", description = "Renvoie la photo du membre connecté") + @APIResponses(value = { + @APIResponse(responseCode = "200", description = "La photo"), + @APIResponse(responseCode = "403", description = "Accès refusé"), + @APIResponse(responseCode = "500", description = "Erreur interne du serveur") + }) + public Uni getMePhoto() { + return membreService.getByAccountId(securityCtx.getSubject()) + .chain(Unchecked.function( + m -> Utils.getMediaFile(m.getId(), media, "ppMembre", Uni.createFrom().nullItem()))); + } + @GET @Path("{id}/photo") @RolesAllowed({"federation_admin", "club_president", "club_secretaire", "club_respo_intra"}) diff --git a/src/main/webapp/src/pages/MePage.jsx b/src/main/webapp/src/pages/MePage.jsx index 3ae80a2..cdd105b 100644 --- a/src/main/webapp/src/pages/MePage.jsx +++ b/src/main/webapp/src/pages/MePage.jsx @@ -73,7 +73,7 @@ function PhotoCard({data}) {
avatar
From 7085473c009111576671e23087255f8a6945b7db Mon Sep 17 00:00:00 2001 From: Thibaut Valentin Date: Wed, 5 Feb 2025 11:43:11 +0100 Subject: [PATCH 4/6] fix(admin_membre): error loading licence on null certificate --- src/main/webapp/src/pages/admin/member/LicenceCard.jsx | 10 +++++++--- 1 file changed, 7 insertions(+), 3 deletions(-) diff --git a/src/main/webapp/src/pages/admin/member/LicenceCard.jsx b/src/main/webapp/src/pages/admin/member/LicenceCard.jsx index fd3f20d..5c677ed 100644 --- a/src/main/webapp/src/pages/admin/member/LicenceCard.jsx +++ b/src/main/webapp/src/pages/admin/member/LicenceCard.jsx @@ -91,7 +91,6 @@ function sendLicence(event, dispatch) { event.preventDefault(); const formData = new FormData(event.target); - formData.set('certificate', `${event.target.certificateBy?.value}¤${event.target.certificateDate?.value}`) formData.set('licence', event.target.licence?.value?.length > 0 ? event.target.licence?.value : null) toast.promise( @@ -152,8 +151,13 @@ function ModalContent({licence, dispatch}) { if (licence.id !== -1) { setNew(false) setSaison(licence.saison) - setCertificateBy(licence.certificate.split('¤')[0]) - setCertificateDate(licence.certificate.split('¤')[1]) + if (licence.certificate === null) { + setCertificateBy("") + setCertificateDate("") + } else { + setCertificateBy(licence.certificate.split('¤')[0]) + setCertificateDate(licence.certificate.split('¤')[1]) + } setValidate(licence.validate) } else { setNew(true) From b79455fb03396aa4862c9fcfcc43162f3917e75f Mon Sep 17 00:00:00 2001 From: Thibaut Valentin Date: Wed, 5 Feb 2025 11:46:38 +0100 Subject: [PATCH 5/6] fix(club): add club status access to club_respo_intra role --- src/main/java/fr/titionfire/ffsaf/rest/ClubEndpoints.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/main/java/fr/titionfire/ffsaf/rest/ClubEndpoints.java b/src/main/java/fr/titionfire/ffsaf/rest/ClubEndpoints.java index 3c49cd8..ed90fe1 100644 --- a/src/main/java/fr/titionfire/ffsaf/rest/ClubEndpoints.java +++ b/src/main/java/fr/titionfire/ffsaf/rest/ClubEndpoints.java @@ -292,7 +292,7 @@ public class ClubEndpoints { @GET @Path("{id}/status") - @RolesAllowed({"federation_admin", "club_president", "club_secretaire"}) + @RolesAllowed({"federation_admin", "club_president", "club_secretaire", "club_respo_intra"}) @Operation(summary = "Renvoie le statut du club", description = "Renvoie le statut du club spécifié") @APIResponses(value = { @APIResponse(responseCode = "200", description = "Le statut du club"), From f2cda5aa3411209b6c7ab61badab4dce8e43c8d0 Mon Sep 17 00:00:00 2001 From: Thibaut Valentin Date: Wed, 5 Feb 2025 11:52:31 +0100 Subject: [PATCH 6/6] fix(pdf): use quarkus version of openpdf --- pom.xml | 32 ++++++++++++++++++++++---------- 1 file changed, 22 insertions(+), 10 deletions(-) diff --git a/pom.xml b/pom.xml index 199dcd0..8b5111d 100644 --- a/pom.xml +++ b/pom.xml @@ -76,22 +76,39 @@ + + io.quarkus + quarkus-awt + ${quarkus.platform.version} + + + io.quarkiverse.openpdf + quarkus-openpdf + 3.1.2 + + + io.quarkus + quarkus-awt + + + io.quarkus quarkus-junit5 test + io.quarkus quarkus-oidc + io.quarkus quarkus-keycloak-authorization - io.quarkus quarkus-keycloak-admin-rest-client @@ -109,11 +126,11 @@ jodd-util 6.2.1 - io.quarkus quarkus-websockets + io.quarkus quarkus-smallrye-openapi @@ -128,12 +145,6 @@ io.quarkus quarkus-cache - - com.github.librepdf - openpdf - 2.0.3 - - org.apache.xmlgraphics fop @@ -143,7 +154,6 @@ io.quarkus quarkus-mailer - @@ -212,7 +222,9 @@ false - --initialize-at-run-time=com.fasterxml.jackson.databind.ext.DOMDeserializer + + --initialize-at-run-time=com.fasterxml.jackson.databind.ext.DOMDeserializer\,com.lowagie\,java.awt\,sun.font + true false