feat: licence add number

This commit is contained in:
Thibaut Valentin 2024-07-17 11:14:26 +02:00
parent d268461bfd
commit f84ad91dc8

View File

@ -4,7 +4,9 @@ import fr.titionfire.ffsaf.data.model.LicenceModel;
import fr.titionfire.ffsaf.data.model.MembreModel; import fr.titionfire.ffsaf.data.model.MembreModel;
import fr.titionfire.ffsaf.data.repository.CombRepository; import fr.titionfire.ffsaf.data.repository.CombRepository;
import fr.titionfire.ffsaf.data.repository.LicenceRepository; 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.rest.from.LicenceForm;
import fr.titionfire.ffsaf.utils.SequenceType;
import fr.titionfire.ffsaf.utils.Utils; import fr.titionfire.ffsaf.utils.Utils;
import io.quarkus.hibernate.reactive.panache.Panache; import io.quarkus.hibernate.reactive.panache.Panache;
import io.quarkus.hibernate.reactive.panache.common.WithSession; import io.quarkus.hibernate.reactive.panache.common.WithSession;
@ -29,8 +31,12 @@ public class LicenceService {
@Inject @Inject
CombRepository combRepository; CombRepository combRepository;
@Inject
SequenceRepository sequenceRepository;
public Uni<List<LicenceModel>> getLicence(long id, Consumer<MembreModel> checkPerm) { public Uni<List<LicenceModel>> getLicence(long id, Consumer<MembreModel> 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<List<LicenceModel>> getCurrentSaisonLicence(JsonWebToken idToken) { public Uni<List<LicenceModel>> getCurrentSaisonLicence(JsonWebToken idToken) {
@ -44,19 +50,33 @@ public class LicenceService {
public Uni<LicenceModel> setLicence(long id, LicenceForm form) { public Uni<LicenceModel> setLicence(long id, LicenceForm form) {
if (form.getId() == -1) { if (form.getId() == -1) {
return combRepository.findById(id).chain(combRepository -> { return combRepository.findById(id).chain(membreModel -> {
LicenceModel model = new LicenceModel(); LicenceModel model = new LicenceModel();
model.setMembre(combRepository); model.setMembre(membreModel);
model.setSaison(form.getSaison()); model.setSaison(form.getSaison());
model.setCertificate(form.isCertificate()); model.setCertificate(form.isCertificate());
model.setValidate(form.isValidate()); 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 { } else {
return repository.findById(form.getId()).chain(model -> { return repository.findById(form.getId()).chain(model -> {
model.setCertificate(form.isCertificate()); model.setCertificate(form.isCertificate());
model.setValidate(form.isValidate()); 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<LicenceModel> askLicence(long id, LicenceForm form, Consumer<MembreModel> checkPerm) { public Uni<LicenceModel> askLicence(long id, LicenceForm form, Consumer<MembreModel> checkPerm) {
return combRepository.findById(id).invoke(checkPerm).chain(membreModel -> { return combRepository.findById(id).invoke(checkPerm).chain(membreModel -> {
if (form.getId() == -1) { if (form.getId() == -1) {
return repository.find("saison = ?1 AND membre = ?2", Utils.getSaison(), membreModel).count().invoke(Unchecked.consumer(count -> { return repository.find("saison = ?1 AND membre = ?2", Utils.getSaison(), membreModel).count()
if (count > 0) .invoke(Unchecked.consumer(count -> {
throw new BadRequestException(); if (count > 0)
})).chain(__ -> combRepository.findById(id).chain(combRepository -> { throw new BadRequestException();
LicenceModel model = new LicenceModel(); })).chain(__ -> combRepository.findById(id).chain(combRepository -> {
model.setMembre(combRepository); LicenceModel model = new LicenceModel();
model.setSaison(Utils.getSaison()); model.setMembre(combRepository);
model.setCertificate(form.isCertificate()); model.setSaison(Utils.getSaison());
model.setValidate(false); model.setCertificate(form.isCertificate());
return Panache.withTransaction(() -> repository.persist(model)); model.setValidate(false);
})); return Panache.withTransaction(() -> repository.persist(model));
}));
} else { } else {
return repository.findById(form.getId()).chain(model -> { return repository.findById(form.getId()).chain(model -> {
model.setCertificate(form.isCertificate()); model.setCertificate(form.isCertificate());