feat: add club member's gestion page

This commit is contained in:
2024-02-04 22:13:21 +01:00
parent 0c9020890a
commit 2a59c22db6
28 changed files with 935 additions and 72 deletions

View File

@@ -1,17 +1,22 @@
package fr.titionfire.ffsaf.domain.service;
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.rest.from.LicenceForm;
import fr.titionfire.ffsaf.utils.Utils;
import io.quarkus.hibernate.reactive.panache.Panache;
import io.quarkus.hibernate.reactive.panache.common.WithSession;
import io.smallrye.mutiny.Uni;
import io.smallrye.mutiny.unchecked.Unchecked;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import jakarta.ws.rs.BadRequestException;
import org.hibernate.reactive.mutiny.Mutiny;
import java.util.List;
import java.util.function.Consumer;
@WithSession
@ApplicationScoped
@@ -23,8 +28,8 @@ public class LicenceService {
@Inject
CombRepository combRepository;
public Uni<List<LicenceModel>> getLicence(long id) {
return combRepository.findById(id).chain(combRepository -> Mutiny.fetch(combRepository.getLicences()));
public Uni<List<LicenceModel>> getLicence(long id, Consumer<MembreModel> checkPerm) {
return combRepository.findById(id).invoke(checkPerm).chain(combRepository -> Mutiny.fetch(combRepository.getLicences()));
}
public Uni<LicenceModel> setLicence(long id, LicenceForm form) {
@@ -49,4 +54,33 @@ public class LicenceService {
public Uni<?> deleteLicence(long id) {
return Panache.withTransaction(() -> repository.deleteById(id));
}
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", Utils.getSaison()).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());
return Panache.withTransaction(() -> repository.persist(model));
});
}
});
}
public Uni<?> deleteAskLicence(long id, Consumer<MembreModel> checkPerm) {
return repository.findById(id)
.call(licenceModel -> Mutiny.fetch(licenceModel.getMembre()).invoke(checkPerm))
.chain(__ -> Panache.withTransaction(() -> repository.deleteById(id)));
}
}