feat: AffiliationCard

This commit is contained in:
2024-07-14 15:00:28 +02:00
parent 6a21bd4735
commit b2438ec3d8
10 changed files with 99 additions and 102 deletions

View File

@@ -1,11 +1,12 @@
package fr.titionfire.ffsaf.domain.service;
import fr.titionfire.ffsaf.data.model.AffiliationModel;
import fr.titionfire.ffsaf.data.model.AffiliationRequestModel;
import fr.titionfire.ffsaf.data.model.ClubModel;
import fr.titionfire.ffsaf.data.repository.AffiliationRepository;
import fr.titionfire.ffsaf.data.repository.AffiliationRequestRepository;
import fr.titionfire.ffsaf.data.repository.ClubRepository;
import fr.titionfire.ffsaf.data.repository.CombRepository;
import fr.titionfire.ffsaf.rest.data.SimpleAffiliation;
import fr.titionfire.ffsaf.rest.from.AffiliationForm;
import fr.titionfire.ffsaf.rest.from.AffiliationRequestForm;
import fr.titionfire.ffsaf.utils.Utils;
import io.quarkus.hibernate.reactive.panache.Panache;
@@ -14,9 +15,10 @@ import io.smallrye.mutiny.Uni;
import jakarta.enterprise.context.ApplicationScoped;
import jakarta.inject.Inject;
import org.eclipse.microprofile.config.inject.ConfigProperty;
import org.hibernate.reactive.mutiny.Mutiny;
import java.util.List;
import java.util.function.Consumer;
import java.util.stream.Stream;
@WithSession
@ApplicationScoped
@@ -26,7 +28,13 @@ public class AffiliationService {
CombRepository combRepository;
@Inject
AffiliationRequestRepository repository;
ClubRepository clubRepository;
@Inject
AffiliationRequestRepository repositoryRequest;
@Inject
AffiliationRepository repository;
@ConfigProperty(name = "upload_dir")
String media;
@@ -57,27 +65,46 @@ public class AffiliationService {
throw new IllegalArgumentException("Licence membre n°3 inconnue");
}
}) : Uni.createFrom().nullItem())
).chain(model -> Panache.withTransaction(() -> repository.persist(model)))
.onItem().invoke(model -> Uni.createFrom().future(Utils.replacePhoto(model.getId(), form.getLogo(), media,
).chain(model -> Panache.withTransaction(() -> repositoryRequest.persist(model)))
.onItem()
.invoke(model -> Uni.createFrom().future(Utils.replacePhoto(model.getId(), form.getLogo(), media,
"aff_request/logo")))
.onItem().invoke(model -> Uni.createFrom().future(Utils.replacePhoto(model.getId(), form.getStatus(), media,
.onItem()
.invoke(model -> Uni.createFrom().future(Utils.replacePhoto(model.getId(), form.getStatus(), media,
"aff_request/status")))
.map(__ -> "Ok");
}
public Uni<List<SimpleAffiliation>> getCurrentSaisonAffiliation() {
return Uni.createFrom().nullItem(); // TODO
return repository.list("saison = ?1", Utils.getSaison())
.map(models -> models.stream().map(SimpleAffiliation::fromModel).toList())
.chain(aff -> repositoryRequest.list("saison = ?1", Utils.getSaison())
.chain(models -> Uni.join().all(models.stream().map(model ->
clubRepository.find("siret = ?1", model.getSiret()).firstResult()
.map(c -> new SimpleAffiliation(model.getId() * -1, c.getId(),
model.getSaison(), false)))
.toList()).andFailFast()
).map(aff2 -> Stream.concat(aff2.stream(), aff.stream()).toList())
);
}
public Uni<List<SimpleAffiliation>> getAffiliation(long id, Consumer<ClubModel> checkPerm) {
return Uni.createFrom().nullItem(); // TODO
public Uni<List<SimpleAffiliation>> getAffiliation(long id) {
return clubRepository.findById(id).call(model -> Mutiny.fetch(model.getAffiliations()))
.chain(model -> repositoryRequest.list("siret = ?1", model.getSIRET())
.map(reqs -> reqs.stream().map(req ->
new SimpleAffiliation(req.getId() * -1, model.getId(), req.getSaison(), false)))
.map(aff2 -> Stream.concat(aff2,
model.getAffiliations().stream().map(SimpleAffiliation::fromModel)).toList())
);
}
public Uni<SimpleAffiliation> setAffiliation(long id, AffiliationForm form) {
return Uni.createFrom().nullItem(); // TODO
public Uni<SimpleAffiliation> setAffiliation(long id, int saison) {
return clubRepository.findById(id).chain(club ->
Panache.withTransaction(() -> repository.persist(new AffiliationModel(null, club, saison))))
.map(SimpleAffiliation::fromModel);
}
public Uni<?> deleteAffiliation(long id) {
return Uni.createFrom().nullItem(); // TODO
return Panache.withTransaction(() -> repository.deleteById(id));
}
}