From 0a56f8c1807340922f279cbdb4763692c251bf47 Mon Sep 17 00:00:00 2001 From: Thibaut Valentin Date: Wed, 13 Aug 2025 22:29:49 +0200 Subject: [PATCH] feat: add licence log --- .../ffsaf/data/model/LicenceModel.java | 12 +++++- .../domain/service/AffiliationService.java | 7 ++- .../ffsaf/domain/service/LicenceService.java | 43 +++++++++++++------ 3 files changed, 48 insertions(+), 14 deletions(-) diff --git a/src/main/java/fr/titionfire/ffsaf/data/model/LicenceModel.java b/src/main/java/fr/titionfire/ffsaf/data/model/LicenceModel.java index c14547e..cf080b4 100644 --- a/src/main/java/fr/titionfire/ffsaf/data/model/LicenceModel.java +++ b/src/main/java/fr/titionfire/ffsaf/data/model/LicenceModel.java @@ -14,7 +14,7 @@ import org.eclipse.microprofile.openapi.annotations.media.Schema; @Entity @Table(name = "licence") -public class LicenceModel { +public class LicenceModel implements LoggableModel { @Id @GeneratedValue(strategy = GenerationType.IDENTITY) @Schema(description = "L'identifiant de la licence.") @@ -39,4 +39,14 @@ public class LicenceModel { @Schema(description = "Licence payer", example = "true") @Column(nullable = false, columnDefinition = "boolean default false") boolean pay = false; + + @Override + public String getObjectName() { + return "licence " + id.toString(); + } + + @Override + public LogModel.ObjectType getObjectType() { + return LogModel.ObjectType.Licence; + } } 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 89c7d28..3604881 100644 --- a/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/AffiliationService.java @@ -55,6 +55,9 @@ public class AffiliationService { @Inject ReactiveMailer reactiveMailer; + @Inject + LoggerService ls; + @ConfigProperty(name = "upload_dir") String media; @@ -263,7 +266,9 @@ public class AffiliationService { .call(l1 -> l1 != null && l1.stream().anyMatch(l -> l.getSaison() == saison) ? Uni.createFrom().nullItem() : Panache.withTransaction(() -> licenceRepository.persist( - new LicenceModel(null, m, club.getId(), saison, null, true, false))))); + new LicenceModel(null, m, club.getId(), saison, null, true, false))) + .call(licenceModel -> ls.logA(LogModel.ActionType.ADD, m.getObjectName(), + licenceModel)))); } public Uni accept(AffiliationRequestSaveForm form) { diff --git a/src/main/java/fr/titionfire/ffsaf/domain/service/LicenceService.java b/src/main/java/fr/titionfire/ffsaf/domain/service/LicenceService.java index d4e1f50..9a061a7 100644 --- a/src/main/java/fr/titionfire/ffsaf/domain/service/LicenceService.java +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/LicenceService.java @@ -1,6 +1,7 @@ package fr.titionfire.ffsaf.domain.service; import fr.titionfire.ffsaf.data.model.LicenceModel; +import fr.titionfire.ffsaf.data.model.LogModel; import fr.titionfire.ffsaf.data.model.MembreModel; import fr.titionfire.ffsaf.data.repository.CombRepository; import fr.titionfire.ffsaf.data.repository.LicenceRepository; @@ -38,6 +39,9 @@ public class LicenceService { @Inject KeycloakService keycloakService; + @Inject + LoggerService ls; + public Uni> getLicence(long id, Consumer checkPerm) { return combRepository.findById(id).invoke(checkPerm) .chain(combRepository -> Mutiny.fetch(combRepository.getLicences())); @@ -58,6 +62,8 @@ public class LicenceService { for (Long id : ids) { uni = uni.chain(__ -> repository.find("membre.id = ?1 AND saison = ?2", id, Utils.getSaison()).firstResult() .chain(model -> { + if (!model.isValidate()) + ls.logUpdate("validation de la licence", model); model.setValidate(true); return Panache.withTransaction(() -> repository.persist(model) .call(m -> Mutiny.fetch(m.getMembre()) @@ -66,7 +72,7 @@ public class LicenceService { })) .map(__ -> "OK"); } - return uni; + return uni.call(__ -> ls.append()); } public Uni setLicence(long id, LicenceForm form) { @@ -80,21 +86,27 @@ public class LicenceService { model.setValidate(form.isValidate()); model.setPay(form.isPay()); return Panache.withTransaction(() -> repository.persist(model) - .call(m -> m.isValidate() ? Uni.createFrom().item(membreModel) - .call(genLicenceNumberAndAccountIfNeed()) - : Uni.createFrom().nullItem() - )); + .call(m -> m.isValidate() ? Uni.createFrom().item(membreModel) + .call(genLicenceNumberAndAccountIfNeed()) + : Uni.createFrom().nullItem() + )) + .call(licenceModel -> ls.logA(LogModel.ActionType.ADD, membreModel.getObjectName(), + licenceModel)); }); } else { return repository.findById(form.getId()).chain(model -> { + ls.logChange("Certificate", model.getCertificate(), form.getCertificate(), model); + ls.logChange("Validate", model.isValidate(), form.isValidate(), model); + ls.logChange("Pay", model.isPay(), form.isPay(), model); model.setCertificate(form.getCertificate()); model.setValidate(form.isValidate()); model.setPay(form.isPay()); return Panache.withTransaction(() -> repository.persist(model) - .call(m -> m.isValidate() ? Mutiny.fetch(m.getMembre()) - .call(genLicenceNumberAndAccountIfNeed()) - : Uni.createFrom().nullItem() - )); + .call(m -> m.isValidate() ? Mutiny.fetch(m.getMembre()) + .call(genLicenceNumberAndAccountIfNeed()) + : Uni.createFrom().nullItem() + )) + .call(__ -> ls.append()); }); } } @@ -111,7 +123,9 @@ public class LicenceService { } public Uni deleteLicence(long id) { - return Panache.withTransaction(() -> repository.deleteById(id)); + return repository.findById(id) + .call(model -> ls.logADelete(model)) + .chain(model -> repository.delete(model)); } public Uni askLicence(long id, LicenceForm form, Consumer checkPerm) { @@ -129,11 +143,15 @@ public class LicenceService { model.setCertificate(form.getCertificate()); model.setValidate(false); return Panache.withTransaction(() -> repository.persist(model)); - })); + })) + .call(licenceModel -> ls.logA(LogModel.ActionType.ADD, membreModel.getObjectName(), + licenceModel)); } else { return repository.findById(form.getId()).chain(model -> { + ls.logChange("Certificate", model.getCertificate(), form.getCertificate(), model); model.setCertificate(form.getCertificate()); - return Panache.withTransaction(() -> repository.persist(model)); + return Panache.withTransaction(() -> repository.persist(model)) + .call(__ -> ls.append()); }); } }); @@ -148,6 +166,7 @@ public class LicenceService { if (licenceModel.isPay()) throw new DBadRequestException("Impossible de supprimer une licence déjà payée"); })) + .call(model -> ls.logADelete(model)) .chain(__ -> Panache.withTransaction(() -> repository.deleteById(id))); }