83 lines
3.4 KiB
Java
83 lines
3.4 KiB
Java
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<List<MembreModel>> getAll() {
|
|
return repository.listAll(Sort.ascending("fname", "lname"));
|
|
}
|
|
|
|
public Uni<MembreModel> getById(long id) {
|
|
return repository.findById(id);
|
|
}
|
|
|
|
public Uni<String> 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));
|
|
});
|
|
}
|
|
}
|