package fr.titionfire.ffsaf.domain.service; import fr.titionfire.ffsaf.data.model.MembreModel; import fr.titionfire.ffsaf.data.repository.ClubRepository; import fr.titionfire.ffsaf.data.repository.CombRepository; import fr.titionfire.ffsaf.net2.ServerCustom; import fr.titionfire.ffsaf.net2.data.SimpleCombModel; import fr.titionfire.ffsaf.net2.request.SReqComb; import fr.titionfire.ffsaf.rest.from.FullMemberForm; import fr.titionfire.ffsaf.utils.Pair; import io.quarkus.hibernate.reactive.panache.Panache; import io.quarkus.hibernate.reactive.panache.common.WithSession; import io.quarkus.panache.common.Sort; import io.quarkus.vertx.VertxContextSupport; import io.smallrye.mutiny.Uni; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import java.util.List; @WithSession @ApplicationScoped public class MembreService { @Inject CombRepository repository; @Inject ClubRepository clubRepository; @Inject ServerCustom serverCustom; @Inject KeycloakService keycloakService; public SimpleCombModel find(int licence, String np) throws Throwable { return VertxContextSupport.subscribeAndAwait(() -> Panache.withTransaction(() -> repository.find("licence = ?1 AND (lname collate UTF8_GENERAL_CI LIKE ?2 OR fname collate UTF8_GENERAL_CI LIKE ?2)", licence, np).firstResult().map(SimpleCombModel::fromModel))); } public SimpleCombModel findByIdOptionalComb(long id) throws Throwable { return VertxContextSupport.subscribeAndAwait(() -> Panache.withTransaction(() -> repository.findById(id).map(SimpleCombModel::fromModel))); } public Uni> getAll() { return repository.listAll(Sort.ascending("fname", "lname")); } public Uni getById(long id) { return repository.findById(id); } public Uni update(long id, FullMemberForm membre) { return repository.findById(id) .chain(membreModel -> clubRepository.findById(membre.getClub()).map(club -> new Pair<>(membreModel, club))) .onItem().transformToUni(pair -> { MembreModel m = pair.getKey(); m.setFname(membre.getFname()); m.setLname(membre.getLname()); m.setClub(pair.getValue()); m.setCountry(membre.getCountry()); m.setBirth_date(membre.getBirth_date()); m.setGenre(membre.getGenre()); m.setCategorie(membre.getCategorie()); m.setRole(membre.getRole()); m.setGrade_arbitrage(membre.getGrade_arbitrage()); m.setEmail(membre.getEmail()); return Panache.withTransaction(() -> repository.persist(m)); }) .invoke(membreModel -> SReqComb.sendIfNeed(serverCustom.clients, SimpleCombModel.fromModel(membreModel))) .call(membreModel -> (membreModel.getUserId() != null) ? keycloakService.setClubGroupMembre(membreModel, membreModel.getClub()) : Uni.createFrom().nullItem()) .map(__ -> "OK"); } public Uni setUserId(Long id, String id1) { return repository.findById(id).chain(membreModel -> { membreModel.setUserId(id1); return Panache.withTransaction(() -> repository.persist(membreModel)); }); } }