From f84ad91dc8da11b5d1456acaeda16e440083eaa4 Mon Sep 17 00:00:00 2001 From: Thibaut Valentin Date: Wed, 17 Jul 2024 11:14:26 +0200 Subject: [PATCH] feat: licence add number --- .../ffsaf/domain/service/LicenceService.java | 53 +++++++++++++------ 1 file changed, 37 insertions(+), 16 deletions(-) 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 6843358..155a103 100644 --- a/src/main/java/fr/titionfire/ffsaf/domain/service/LicenceService.java +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/LicenceService.java @@ -4,7 +4,9 @@ import fr.titionfire.ffsaf.data.model.LicenceModel; import fr.titionfire.ffsaf.data.model.MembreModel; import fr.titionfire.ffsaf.data.repository.CombRepository; import fr.titionfire.ffsaf.data.repository.LicenceRepository; +import fr.titionfire.ffsaf.data.repository.SequenceRepository; import fr.titionfire.ffsaf.rest.from.LicenceForm; +import fr.titionfire.ffsaf.utils.SequenceType; import fr.titionfire.ffsaf.utils.Utils; import io.quarkus.hibernate.reactive.panache.Panache; import io.quarkus.hibernate.reactive.panache.common.WithSession; @@ -29,8 +31,12 @@ public class LicenceService { @Inject CombRepository combRepository; + @Inject + SequenceRepository sequenceRepository; + public Uni> getLicence(long id, Consumer checkPerm) { - return combRepository.findById(id).invoke(checkPerm).chain(combRepository -> Mutiny.fetch(combRepository.getLicences())); + return combRepository.findById(id).invoke(checkPerm) + .chain(combRepository -> Mutiny.fetch(combRepository.getLicences())); } public Uni> getCurrentSaisonLicence(JsonWebToken idToken) { @@ -44,19 +50,33 @@ public class LicenceService { public Uni setLicence(long id, LicenceForm form) { if (form.getId() == -1) { - return combRepository.findById(id).chain(combRepository -> { + return combRepository.findById(id).chain(membreModel -> { LicenceModel model = new LicenceModel(); - model.setMembre(combRepository); + model.setMembre(membreModel); model.setSaison(form.getSaison()); model.setCertificate(form.isCertificate()); model.setValidate(form.isValidate()); - return Panache.withTransaction(() -> repository.persist(model)); + return Panache.withTransaction(() -> repository.persist(model) + .call(m -> (m.isValidate() && membreModel.getLicence() <= 0) ? + sequenceRepository.getNextValueInTransaction(SequenceType.Licence) + .invoke(i -> membreModel.setLicence(Math.toIntExact(i))) + .chain(() -> combRepository.persist(membreModel)) + : Uni.createFrom().nullItem() + )); }); } else { return repository.findById(form.getId()).chain(model -> { model.setCertificate(form.isCertificate()); model.setValidate(form.isValidate()); - return Panache.withTransaction(() -> repository.persist(model)); + return Panache.withTransaction(() -> repository.persist(model) + .call(m -> m.isValidate() ? Mutiny.fetch(m.getMembre()) + .call(membreModel -> (membreModel.getLicence() <= 0) ? + sequenceRepository.getNextValueInTransaction(SequenceType.Licence) + .invoke(i -> membreModel.setLicence(Math.toIntExact(i))) + .chain(() -> combRepository.persist(membreModel)) + : Uni.createFrom().nullItem()) + : Uni.createFrom().nullItem() + )); }); } } @@ -68,17 +88,18 @@ public class LicenceService { public Uni askLicence(long id, LicenceForm form, Consumer checkPerm) { return combRepository.findById(id).invoke(checkPerm).chain(membreModel -> { if (form.getId() == -1) { - return repository.find("saison = ?1 AND membre = ?2", Utils.getSaison(), membreModel).count().invoke(Unchecked.consumer(count -> { - if (count > 0) - throw new BadRequestException(); - })).chain(__ -> combRepository.findById(id).chain(combRepository -> { - LicenceModel model = new LicenceModel(); - model.setMembre(combRepository); - model.setSaison(Utils.getSaison()); - model.setCertificate(form.isCertificate()); - model.setValidate(false); - return Panache.withTransaction(() -> repository.persist(model)); - })); + return repository.find("saison = ?1 AND membre = ?2", Utils.getSaison(), membreModel).count() + .invoke(Unchecked.consumer(count -> { + if (count > 0) + throw new BadRequestException(); + })).chain(__ -> combRepository.findById(id).chain(combRepository -> { + LicenceModel model = new LicenceModel(); + model.setMembre(combRepository); + model.setSaison(Utils.getSaison()); + model.setCertificate(form.isCertificate()); + model.setValidate(false); + return Panache.withTransaction(() -> repository.persist(model)); + })); } else { return repository.findById(form.getId()).chain(model -> { model.setCertificate(form.isCertificate());