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.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<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) {
@ -44,19 +50,33 @@ public class LicenceService {
public Uni<LicenceModel> 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<LicenceModel> askLicence(long id, LicenceForm form, Consumer<MembreModel> 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());