From 7f80c876d3568478c1cad6a6799d835fd06ea284 Mon Sep 17 00:00:00 2001 From: Thibaut Valentin Date: Wed, 14 Aug 2024 21:33:11 +0200 Subject: [PATCH] wip: send competition data --- .../ffsaf/data/model/MatchModel.java | 19 +- .../ffsaf/data/model/PouleModel.java | 4 +- .../ffsaf/data/model/TreeModel.java | 6 +- .../ffsaf/domain/service/MatchService.java | 33 ++- .../ffsaf/domain/service/PouleService.java | 196 +++++++++++++++++- .../ffsaf/domain/service/TreeService.java | 4 + .../titionfire/ffsaf/rest/MatchEndpoints.java | 10 +- .../titionfire/ffsaf/rest/PouleEndpoints.java | 14 +- .../titionfire/ffsaf/rest/data/MatchData.java | 9 +- .../ffsaf/rest/data/PouleFullData.java | 28 +++ .../titionfire/ffsaf/rest/data/TreeData.java | 8 +- .../ffsaf/utils/ScoreEmbeddable.java | 3 +- 12 files changed, 291 insertions(+), 43 deletions(-) create mode 100644 src/main/java/fr/titionfire/ffsaf/domain/service/TreeService.java create mode 100644 src/main/java/fr/titionfire/ffsaf/rest/data/PouleFullData.java diff --git a/src/main/java/fr/titionfire/ffsaf/data/model/MatchModel.java b/src/main/java/fr/titionfire/ffsaf/data/model/MatchModel.java index 9ac0e47..ece2466 100644 --- a/src/main/java/fr/titionfire/ffsaf/data/model/MatchModel.java +++ b/src/main/java/fr/titionfire/ffsaf/data/model/MatchModel.java @@ -4,10 +4,7 @@ import fr.titionfire.ffsaf.utils.CompetitionSystem; import fr.titionfire.ffsaf.utils.ScoreEmbeddable; import io.quarkus.runtime.annotations.RegisterForReflection; import jakarta.persistence.*; -import lombok.AllArgsConstructor; -import lombok.Getter; -import lombok.NoArgsConstructor; -import lombok.Setter; +import lombok.*; import java.util.ArrayList; import java.util.List; @@ -19,6 +16,7 @@ import java.util.List; @RegisterForReflection @Entity +@ToString @Table(name = "match") public class MatchModel { @@ -30,24 +28,27 @@ public class MatchModel { CompetitionSystem system; Long systemId; - @ManyToOne + @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "c1", referencedColumnName = "id") MembreModel c1_id = null; String c1_str = null; - @ManyToOne + @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "c2", referencedColumnName = "id") MembreModel c2_id = null; String c2_str = null; - @Column(name = "id_poule") - Long poule; + @ManyToOne(fetch = FetchType.EAGER) + @JoinColumn(name = "id_poule", referencedColumnName = "id") + PouleModel poule = null; long poule_ord = 0; - @ElementCollection + boolean isEnd = true; + + @ElementCollection(fetch = FetchType.EAGER) @CollectionTable(name = "score", joinColumns = @JoinColumn(name = "id_match")) List scores = new ArrayList<>(); diff --git a/src/main/java/fr/titionfire/ffsaf/data/model/PouleModel.java b/src/main/java/fr/titionfire/ffsaf/data/model/PouleModel.java index 693042e..e18590b 100644 --- a/src/main/java/fr/titionfire/ffsaf/data/model/PouleModel.java +++ b/src/main/java/fr/titionfire/ffsaf/data/model/PouleModel.java @@ -33,11 +33,11 @@ public class PouleModel { @JoinColumn(name = "id_compet", referencedColumnName = "id") CompetitionModel compet; - @OneToMany + @OneToMany(fetch = FetchType.LAZY) @JoinColumn(name = "id_poule", referencedColumnName = "id") List matchs; - @OneToMany + @OneToMany(fetch = FetchType.LAZY) @JoinColumn(name = "id_poule", referencedColumnName = "id") List tree; diff --git a/src/main/java/fr/titionfire/ffsaf/data/model/TreeModel.java b/src/main/java/fr/titionfire/ffsaf/data/model/TreeModel.java index 697e49d..c4a701b 100644 --- a/src/main/java/fr/titionfire/ffsaf/data/model/TreeModel.java +++ b/src/main/java/fr/titionfire/ffsaf/data/model/TreeModel.java @@ -25,15 +25,15 @@ public class TreeModel { Integer level; - @ManyToOne + @ManyToOne(fetch = FetchType.EAGER) @JoinColumn(name = "match_id", referencedColumnName = "id") MatchModel match; - @ManyToOne + @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST) @JoinColumn(referencedColumnName = "id") TreeModel left; - @ManyToOne + @ManyToOne(fetch = FetchType.EAGER, cascade = CascadeType.PERSIST) @JoinColumn(referencedColumnName = "id") TreeModel right; } diff --git a/src/main/java/fr/titionfire/ffsaf/domain/service/MatchService.java b/src/main/java/fr/titionfire/ffsaf/domain/service/MatchService.java index 7637444..fb7b97f 100644 --- a/src/main/java/fr/titionfire/ffsaf/domain/service/MatchService.java +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/MatchService.java @@ -7,6 +7,7 @@ import fr.titionfire.ffsaf.data.repository.MatchRepository; import fr.titionfire.ffsaf.data.repository.PouleRepository; import fr.titionfire.ffsaf.rest.data.MatchData; import fr.titionfire.ffsaf.utils.CompetitionSystem; +import fr.titionfire.ffsaf.utils.ScoreEmbeddable; import io.quarkus.hibernate.reactive.panache.Panache; import io.quarkus.hibernate.reactive.panache.common.WithSession; import io.smallrye.mutiny.Uni; @@ -32,7 +33,7 @@ public class MatchService { public Uni getById(Consumer checkPerm, CompetitionSystem system, Long id) { return repository.find("systemId = ?1 AND system = ?2", id, system).firstResult() .onItem().ifNull().failWith(() -> new RuntimeException("Match not found")) - .call(data -> pouleRepository.findById(data.getPoule()) + .call(data -> pouleRepository.findById(data.getPoule().getId()) .invoke(data2 -> checkPerm.accept(data2.getCompet().getClub()))) .map(MatchData::fromModel); } @@ -49,7 +50,8 @@ public class MatchService { return repository.find("systemId = ?1 AND system = ?2", data.getId(), system).firstResult() .chain(o -> { if (o == null) { - return pouleRepository.findById(data.getPoule()) + return pouleRepository.find("systemId = ?1 AND system = ?2", data.getPoule(), system) + .firstResult() .onItem().ifNull().failWith(() -> new RuntimeException("Poule not found")) .invoke(data2 -> checkPerm.accept(data2.getCompet().getClub())) .map(pouleModel -> { @@ -58,11 +60,12 @@ public class MatchService { model.setId(null); model.setSystem(system); model.setSystemId(data.getId()); - model.setPoule(pouleModel.getId()); + model.setPoule(pouleModel); return model; }); } else { - return pouleRepository.findById(data.getPoule()) + return pouleRepository.find("systemId = ?1 AND system = ?2", data.getPoule(), system) + .firstResult() .onItem().ifNull().failWith(() -> new RuntimeException("Poule not found")) .invoke(data2 -> checkPerm.accept(data2.getCompet().getClub())) .map(__ -> o); @@ -73,7 +76,8 @@ public class MatchService { o.setC1_str(data.getC1_str()); o.setC2_str(data.getC2_str()); o.setPoule_ord(data.getPoule_ord()); - o.setScores(data.getScores()); + o.getScores().clear(); + o.getScores().addAll(data.getScores()); return Uni.createFrom().nullItem() .chain(() -> (data.getC1_id() == null) ? @@ -87,11 +91,22 @@ public class MatchService { .map(MatchData::fromModel); } - public Uni delete(Consumer checkPerm, Long id) { - return repository.findById(id) + public Uni updateScore(CompetitionSystem system, Long id, List scores) { + return repository.find("systemId = ?1 AND system = ?2", id, system).firstResult() .onItem().ifNull().failWith(() -> new RuntimeException("Match not found")) - .call(data -> pouleRepository.findById(data.getPoule()) + .invoke(data -> { + data.getScores().clear(); + data.getScores().addAll(scores); + }) + .chain(data -> Panache.withTransaction(() -> repository.persist(data))) + .map(o -> "OK"); + } + + public Uni delete(Consumer checkPerm, CompetitionSystem system, Long id) { + return repository.find("systemId = ?1 AND system = ?2", id, system).firstResult() + .onItem().ifNull().failWith(() -> new RuntimeException("Match not found")) + .chain(data -> pouleRepository.findById(data.getPoule().getId()) .invoke(data2 -> checkPerm.accept(data2.getCompet().getClub())) - .chain(data2 -> Panache.withTransaction(() -> repository.delete("id", data.getId())))); + .chain(data2 -> Panache.withTransaction(() -> repository.delete(data)))); } } diff --git a/src/main/java/fr/titionfire/ffsaf/domain/service/PouleService.java b/src/main/java/fr/titionfire/ffsaf/domain/service/PouleService.java index 2f23ffd..cab86e6 100644 --- a/src/main/java/fr/titionfire/ffsaf/domain/service/PouleService.java +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/PouleService.java @@ -1,11 +1,10 @@ package fr.titionfire.ffsaf.domain.service; -import fr.titionfire.ffsaf.data.model.ClubModel; -import fr.titionfire.ffsaf.data.model.PouleModel; -import fr.titionfire.ffsaf.data.repository.CompetitionRepository; -import fr.titionfire.ffsaf.data.repository.PouleRepository; -import fr.titionfire.ffsaf.data.repository.TreeRepository; +import fr.titionfire.ffsaf.data.model.*; +import fr.titionfire.ffsaf.data.repository.*; import fr.titionfire.ffsaf.rest.data.PouleData; +import fr.titionfire.ffsaf.rest.data.PouleFullData; +import fr.titionfire.ffsaf.rest.data.TreeData; import fr.titionfire.ffsaf.utils.CompetitionSystem; import fr.titionfire.ffsaf.utils.GroupeUtils; import io.quarkus.hibernate.reactive.panache.Panache; @@ -15,10 +14,14 @@ import io.smallrye.mutiny.Uni; import jakarta.enterprise.context.ApplicationScoped; import jakarta.inject.Inject; import org.eclipse.microprofile.jwt.JsonWebToken; +import org.hibernate.reactive.mutiny.Mutiny; import java.util.ArrayList; +import java.util.HashMap; import java.util.List; +import java.util.Objects; import java.util.function.Consumer; +import java.util.stream.Stream; @WithSession @ApplicationScoped @@ -30,9 +33,15 @@ public class PouleService { @Inject CompetitionRepository competRepository; + @Inject + MatchRepository matchRepository; + @Inject TreeRepository treeRepository; + @Inject + CombRepository combRepository; + public Uni getById(Consumer checkPerm, CompetitionSystem system, Long id) { return repository.find("systemId = ?1 AND system = ?2", id, system) .firstResult() @@ -79,10 +88,181 @@ public class PouleService { }).map(PouleData::fromModel); } - public Uni delete(Consumer checkPerm, Long id) { - return repository.findById(id) + private MatchModel findMatch(List matchModelList, Long id) { + return matchModelList.stream().filter(m -> m.getSystemId().equals(id)) + .findFirst().orElse(null); + } + + private TreeModel findNode(List node, Long match_id) { + return node.stream().filter(m -> m.getMatch().getSystemId().equals(match_id)) + .findFirst().orElse(null); + } + + private void flatTreeChild(TreeModel current, ArrayList node) { + if (current != null) { + node.add(current); + flatTreeChild(current.getLeft(), node); + flatTreeChild(current.getRight(), node); + } + } + + private void flatTreeChild(TreeData current, ArrayList node) { + if (current != null) { + node.add(current); + flatTreeChild(current.getLeft(), node); + flatTreeChild(current.getRight(), node); + } + } + + private Uni persisteTree(TreeData data, List node, PouleModel poule, + List matchModelList) { + TreeModel mm = findNode(node, data.getMatch()); + if (mm == null) { + mm = new TreeModel(); + mm.setId(null); + } + mm.setLevel(data.getLevel()); + mm.setPoule(poule.getId()); + mm.setMatch(findMatch(matchModelList, data.getMatch())); + + return Uni.createFrom().item(mm) + .call(o -> (data.getLeft() == null ? Uni.createFrom().nullItem().invoke(o1 -> o.setLeft(null)) : + persisteTree(data.getLeft(), node, poule, matchModelList).invoke(o::setLeft))) + .call(o -> (data.getRight() == null ? Uni.createFrom().nullItem().invoke(o1 -> o.setRight(null)) : + persisteTree(data.getRight(), node, poule, matchModelList).invoke(o::setRight))) + .chain(o -> Panache.withTransaction(() -> treeRepository.persist(o))); + } + + public Uni syncPoule(CompetitionSystem system, PouleFullData data) { + System.out.println(data); + return repository.find("systemId = ?1 AND system = ?2", data.getId(), system) + .firstResult() + .onItem().ifNull().switchTo( + () -> competRepository.findById(data.getCompet()) + .onItem().ifNull().failWith(() -> new RuntimeException("Compet not found")) + .map(o -> { + PouleModel model = new PouleModel(); + model.setId(null); + model.setSystem(system); + model.setSystemId(data.getId()); + model.setMatchs(new ArrayList<>()); + model.setTree(new ArrayList<>()); + model.setCompet(o); + return model; + })) + .call(o -> Mutiny.fetch(o.getMatchs())) + .call(o -> Mutiny.fetch(o.getTree())) + .map(o -> { + o.setName(data.getName()); + o.setType(data.getType()); + + WorkData workData = new WorkData(); + workData.poule = o; + return workData; + }) + .call(o -> Panache.withTransaction(() -> repository.persist(o.poule))) + .call(o -> (data.getMatches() == null || data.getMatches().isEmpty()) ? Uni.createFrom().nullItem() : + Uni.createFrom() + .item(data.getMatches().stream().flatMap(m -> Stream.of(m.getC1_id(), m.getC2_id()) + .filter(Objects::nonNull)).distinct().toList()) + .chain(ids -> ids.isEmpty() ? Uni.createFrom().nullItem() + : combRepository.list("id IN ?1", ids) + .invoke(o2 -> o2.forEach(m -> o.membres.put(m.getId(), m))) + ) + ) + .invoke(in -> { + ArrayList node = new ArrayList<>(); + for (TreeModel treeModel : in.poule.getTree()) + flatTreeChild(treeModel, node); + + ArrayList new_node = new ArrayList<>(); + for (TreeData treeModel : data.getTrees()) + flatTreeChild(treeModel, new_node); + + in.toRmNode = node.stream().filter(m -> new_node.stream() + .noneMatch(m2 -> m2.getMatch().equals(m.getMatch().getSystemId()))) + .map(TreeModel::getId).toList(); + + in.unlinkNode = node; + in.unlinkNode.forEach(n -> { + n.setRight(null); + n.setLeft(null); + }); + + in.toRmMatch = in.poule.getMatchs().stream() + .filter(m -> data.getMatches().stream().noneMatch(m2 -> m2.getId().equals(m.getSystemId()))) + .map(MatchModel::getId).toList(); + }) + .call(in -> in.unlinkNode.isEmpty() ? Uni.createFrom().nullItem() : + Panache.withTransaction(() -> treeRepository.persist(in.unlinkNode))) + .call(in -> in.toRmNode.isEmpty() ? Uni.createFrom().nullItem() : + Panache.withTransaction(() -> treeRepository.delete("id IN ?1", in.toRmNode))) + .call(in -> in.toRmMatch.isEmpty() ? Uni.createFrom().nullItem() : + Panache.withTransaction(() -> Uni.join().all( + in.toRmMatch.stream().map(l -> matchRepository.deleteById(l)).toList()) + .andCollectFailures())) + .call(in -> data.getMatches().isEmpty() ? Uni.createFrom().nullItem() : + Uni.join().all( + data.getMatches().stream().map(m -> { + MatchModel mm = findMatch(in.poule.getMatchs(), m.getId()); + if (mm == null) { + mm = new MatchModel(); + mm.setId(null); + mm.setSystem(system); + mm.setSystemId(m.getId()); + } + mm.setPoule(in.poule); + mm.setPoule_ord(m.getPoule_ord()); + mm.setC1_str(m.getC1_str()); + mm.setC2_str(m.getC2_str()); + mm.setC1_id(in.membres.getOrDefault(m.getC1_id(), null)); + mm.setC2_id(in.membres.getOrDefault(m.getC2_id(), null)); + mm.setEnd(m.isEnd()); + mm.setGroupe(m.getGroupe()); + mm.getScores().clear(); + mm.getScores().addAll(m.getScores()); + + MatchModel finalMm = mm; + return Panache.withTransaction(() -> matchRepository.persist(finalMm) + .invoke(o -> in.match.add(o))); + }).toList()) + .andCollectFailures()) + .call(in -> data.getTrees().isEmpty() ? Uni.createFrom().nullItem() : + Uni.join().all(data.getTrees().stream() + .map(m -> persisteTree(m, in.poule.getTree(), in.poule, in.match)).toList()) + .andCollectFailures()) + .map(__ -> "OK"); + } + + private static class WorkData { + PouleModel poule; + HashMap membres = new HashMap<>(); + List match = new ArrayList<>(); + List toRmMatch; + List unlinkNode; + List toRmNode; + } + + public Uni delete(Consumer checkPerm, CompetitionSystem system, Long id) { + return repository.find("systemId = ?1 AND system = ?2", id, system).firstResult() .onItem().ifNull().failWith(() -> new RuntimeException("Poule not found")) - .invoke(data -> checkPerm.accept(data.getCompet().getClub())) + .call(o -> Mutiny.fetch(o.getMatchs())) + .call(o -> Mutiny.fetch(o.getTree()) + .call(o2 -> o2.isEmpty() ? Uni.createFrom().nullItem() : + Uni.createFrom().item(o2.stream().peek(m -> { + m.setRight(null); + m.setLeft(null); + }).toList()) + .call(in -> Panache.withTransaction(() -> treeRepository.persist(in))) + .map(in -> in.stream().map(TreeModel::getId).toList()) + .call(in -> in.isEmpty() ? Uni.createFrom().nullItem() : + Panache.withTransaction(() -> treeRepository.delete("id IN ?1", in))) + ) + ) + .call(o -> o.getMatchs().isEmpty() ? Uni.createFrom().nullItem() : + Panache.withTransaction(() -> Uni.join().all( + o.getMatchs().stream().map(l -> matchRepository.deleteById(l.getId())).toList()) + .andCollectFailures())) .chain(model -> Panache.withTransaction(() -> repository.delete("id", model.getId()))); } } diff --git a/src/main/java/fr/titionfire/ffsaf/domain/service/TreeService.java b/src/main/java/fr/titionfire/ffsaf/domain/service/TreeService.java new file mode 100644 index 0000000..2e10cc7 --- /dev/null +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/TreeService.java @@ -0,0 +1,4 @@ +package fr.titionfire.ffsaf.domain.service; + +public class TreeService { +} diff --git a/src/main/java/fr/titionfire/ffsaf/rest/MatchEndpoints.java b/src/main/java/fr/titionfire/ffsaf/rest/MatchEndpoints.java index 3b0345b..d67fec7 100644 --- a/src/main/java/fr/titionfire/ffsaf/rest/MatchEndpoints.java +++ b/src/main/java/fr/titionfire/ffsaf/rest/MatchEndpoints.java @@ -6,6 +6,7 @@ import fr.titionfire.ffsaf.rest.data.MatchData; import fr.titionfire.ffsaf.rest.exception.DForbiddenException; import fr.titionfire.ffsaf.utils.CompetitionSystem; import fr.titionfire.ffsaf.utils.GroupeUtils; +import fr.titionfire.ffsaf.utils.ScoreEmbeddable; import io.quarkus.security.Authenticated; import io.quarkus.security.identity.SecurityIdentity; import io.smallrye.mutiny.Uni; @@ -60,10 +61,17 @@ public class MatchEndpoints { return service.addOrUpdate(checkPerm, system, data); } + @POST + @Path("score/{id}") + @Produces(MediaType.APPLICATION_JSON) + public Uni updateScore(@PathParam("id") Long id, List scores) { + return service.updateScore(system, id, scores); + } + @DELETE @Path("{id}") @Produces(MediaType.APPLICATION_JSON) public Uni delete(@PathParam("id") Long id) { - return service.delete(checkPerm, id); + return service.delete(checkPerm, system, id); } } diff --git a/src/main/java/fr/titionfire/ffsaf/rest/PouleEndpoints.java b/src/main/java/fr/titionfire/ffsaf/rest/PouleEndpoints.java index 63173f5..d0c299a 100644 --- a/src/main/java/fr/titionfire/ffsaf/rest/PouleEndpoints.java +++ b/src/main/java/fr/titionfire/ffsaf/rest/PouleEndpoints.java @@ -3,10 +3,10 @@ package fr.titionfire.ffsaf.rest; import fr.titionfire.ffsaf.data.model.ClubModel; import fr.titionfire.ffsaf.domain.service.PouleService; import fr.titionfire.ffsaf.rest.data.PouleData; +import fr.titionfire.ffsaf.rest.data.PouleFullData; import fr.titionfire.ffsaf.rest.exception.DForbiddenException; import fr.titionfire.ffsaf.utils.CompetitionSystem; import fr.titionfire.ffsaf.utils.GroupeUtils; -import io.quarkus.security.Authenticated; import io.quarkus.security.identity.SecurityIdentity; import io.smallrye.mutiny.Uni; import io.smallrye.mutiny.unchecked.Unchecked; @@ -18,7 +18,7 @@ import org.eclipse.microprofile.jwt.JsonWebToken; import java.util.List; import java.util.function.Consumer; -@Authenticated +// @Authenticated @Path("api/poule/{system}/") public class PouleEndpoints { @@ -54,15 +54,23 @@ public class PouleEndpoints { } @POST + @Consumes(MediaType.APPLICATION_JSON) @Produces(MediaType.APPLICATION_JSON) public Uni addOrUpdate(PouleData data) { return service.addOrUpdate(checkPerm, system, data); } + @POST + @Path("sync") + @Consumes(MediaType.APPLICATION_JSON) + public Uni syncPoule(PouleFullData data) { + return service.syncPoule(system, data); + } + @DELETE @Path("{id}") @Produces(MediaType.APPLICATION_JSON) public Uni delete(@PathParam("id") Long id) { - return service.delete(checkPerm, id); + return service.delete(checkPerm, system, id); } } diff --git a/src/main/java/fr/titionfire/ffsaf/rest/data/MatchData.java b/src/main/java/fr/titionfire/ffsaf/rest/data/MatchData.java index f7ce375..b7c942b 100644 --- a/src/main/java/fr/titionfire/ffsaf/rest/data/MatchData.java +++ b/src/main/java/fr/titionfire/ffsaf/rest/data/MatchData.java @@ -19,13 +19,18 @@ public class MatchData { private String c2_str; private Long poule; private long poule_ord; + private boolean isEnd = true; + private char groupe; private List scores; public static MatchData fromModel(MatchModel model) { if (model == null) return null; - return new MatchData(model.getSystemId(), model.getC1_id().getId(), model.getC1_str(), model.getC2_id().getId(), - model.getC2_str(), model.getPoule(), model.getPoule_ord(), model.getScores()); + return new MatchData(model.getSystemId(), + (model.getC1_id() == null) ? null : model.getC1_id().getId(), model.getC1_str(), + (model.getC2_id() == null) ? null : model.getC2_id().getId(), model.getC2_str(), + model.getPoule().getId(), model.getPoule_ord(), model.isEnd(), model.getGroupe(), + model.getScores()); } } diff --git a/src/main/java/fr/titionfire/ffsaf/rest/data/PouleFullData.java b/src/main/java/fr/titionfire/ffsaf/rest/data/PouleFullData.java new file mode 100644 index 0000000..b949111 --- /dev/null +++ b/src/main/java/fr/titionfire/ffsaf/rest/data/PouleFullData.java @@ -0,0 +1,28 @@ +package fr.titionfire.ffsaf.rest.data; + +import lombok.AllArgsConstructor; +import lombok.Data; + +import java.util.List; + +@Data +@AllArgsConstructor +public class PouleFullData { + private Long id; + private String name; + private Long compet; + private Integer type; + private List matches; + private List trees; + + /*public static PouleFullData fromModel(PouleModel pouleModel) { + if (pouleModel == null) + return null; + + PouleEntity pouleEntity = PouleEntity.fromModel(pouleModel); + + return new PouleFullData(pouleEntity.getId(), pouleEntity.getName(), pouleEntity.getCompet().getId(), + pouleEntity.getType(), pouleModel.getMatchs().stream().map(MatchData::fromModel).toList(), + pouleEntity.getTrees().stream().map(TreeData::fromEntity).toList()); + }*/ +} diff --git a/src/main/java/fr/titionfire/ffsaf/rest/data/TreeData.java b/src/main/java/fr/titionfire/ffsaf/rest/data/TreeData.java index cd421df..b4cff47 100644 --- a/src/main/java/fr/titionfire/ffsaf/rest/data/TreeData.java +++ b/src/main/java/fr/titionfire/ffsaf/rest/data/TreeData.java @@ -12,17 +12,15 @@ public class TreeData { private Long id; private Long poule; private Integer level; - private MatchData match; + private Long match; private TreeData left; private TreeData right; - private TreeData associatedNode; public static TreeData fromModel(TreeModel model) { if (model == null) return null; - return new TreeData(model.getId(), model.getPoule(), model.getLevel(), MatchData.fromModel(model.getMatch()), - fromModel(model.getLeft()), - fromModel(model.getRight()), null); + return new TreeData(model.getId(), model.getPoule(), model.getLevel(), model.getMatch().getId(), + fromModel(model.getLeft()), fromModel(model.getRight())); } } diff --git a/src/main/java/fr/titionfire/ffsaf/utils/ScoreEmbeddable.java b/src/main/java/fr/titionfire/ffsaf/utils/ScoreEmbeddable.java index 9468597..53ce863 100644 --- a/src/main/java/fr/titionfire/ffsaf/utils/ScoreEmbeddable.java +++ b/src/main/java/fr/titionfire/ffsaf/utils/ScoreEmbeddable.java @@ -1,12 +1,13 @@ package fr.titionfire.ffsaf.utils; import io.quarkus.runtime.annotations.RegisterForReflection; -import jakarta.persistence.Embeddable; import lombok.AllArgsConstructor; import lombok.Getter; import lombok.NoArgsConstructor; import lombok.Setter; +import jakarta.persistence.*; + @Getter @Setter @AllArgsConstructor