diff --git a/src/main/java/fr/titionfire/ffsaf/domain/service/ResultService.java b/src/main/java/fr/titionfire/ffsaf/domain/service/ResultService.java index 3ed9a78..f1407a6 100644 --- a/src/main/java/fr/titionfire/ffsaf/domain/service/ResultService.java +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/ResultService.java @@ -115,13 +115,15 @@ public class ResultService { public Uni getCategory(String uuid, long poule, SecurityCtx securityCtx) { return hasAccess(uuid, securityCtx).chain(r -> matchRepository.list("category.compet.uuid = ?1 AND category.id = ?2", uuid, poule) - .call(list -> Mutiny.fetch(list.get(0).getCategory().getTree())) + .call(list -> list.isEmpty() ? Uni.createFrom().voidItem() : + Mutiny.fetch(list.get(0).getCategory().getTree())) .map(list -> getData(list, r.getMembre()))); } public Uni getCategory(String uuid, long poule) { return matchRepository.list("category.compet.uuid = ?1 AND category.id = ?2", uuid, poule) - .call(list -> Mutiny.fetch(list.get(0).getCategory().getTree())) + .call(list -> list.isEmpty() ? Uni.createFrom().voidItem() : + Mutiny.fetch(list.get(0).getCategory().getTree())) .map(list -> getData(list, null)); } diff --git a/src/main/java/fr/titionfire/ffsaf/ws/recv/RMatch.java b/src/main/java/fr/titionfire/ffsaf/ws/recv/RMatch.java index abae418..c96b8ba 100644 --- a/src/main/java/fr/titionfire/ffsaf/ws/recv/RMatch.java +++ b/src/main/java/fr/titionfire/ffsaf/ws/recv/RMatch.java @@ -292,32 +292,43 @@ public class RMatch { if (!o.getCompet().getUuid().equals(connection.pathParam("uuid"))) throw new DForbiddenException("Permission denied"); })) - .call(cm -> Panache.withTransaction( - () -> matchRepository.delete("id IN ?1 AND category = ?2", data.matchesToRemove, cm)) - .call(__ -> SSMatch.sendDeleteMatch(connection, data.matchesToRemove))) + .invoke(m -> System.out.println("A00")) + .call(cm -> data.matchesToRemove.isEmpty() ? Uni.createFrom().voidItem() : + (Panache.withTransaction( + () -> matchRepository.delete("id IN ?1 AND category = ?2", data.matchesToRemove, cm)) + .call(__ -> SSMatch.sendDeleteMatch(connection, data.matchesToRemove)))) + .invoke(m -> System.out.println("A0")) .call(cm -> Panache.withSession(() -> matchRepository.list("id IN ?1 AND category = ?2", Stream.concat(data.matchOrderToUpdate.keySet().stream(), data.matchPouleToUpdate.keySet().stream()) .distinct().toList(), cm) + .invoke(m -> System.out.println("A " + m.size())) .invoke(matchModels -> matchModels.forEach(model -> { if (data.matchPouleToUpdate.containsKey(model.getId())) model.setPoule(data.matchPouleToUpdate.get(model.getId())); if (data.matchOrderToUpdate.containsKey(model.getId())) model.setCategory_ord(data.matchOrderToUpdate.get(model.getId())); })) - .call(mm -> Panache.withTransaction(() -> matchRepository.persist(mm))) + .invoke(m -> System.out.println("B " + m.size())) + .call(mm -> mm.isEmpty() ? Uni.createFrom().voidItem() : + Panache.withTransaction(() -> matchRepository.persist(mm))) + .invoke(m -> System.out.println("C")) .invoke(mm -> matches.addAll(mm.stream().map(MatchEntity::fromModel).toList()))) ) + .invoke(m -> System.out.println("D")) .chain(categoryModel -> { Uni> uni = Uni.createFrom().item(new ArrayList<>()); for (AddMatch match : data.newMatch) uni = uni.call(l -> creatMatch(categoryModel, match).invoke(l::add)); - Uni> finalUni = uni; - return Panache.withSession(() -> finalUni); + Uni> finalUni = uni; + return Panache.withSession(() -> finalUni); } ) - .chain(mm -> Panache.withTransaction(() -> matchRepository.create(mm)) - .invoke(__ -> matches.addAll(mm.stream().map(MatchEntity::fromModel).toList()))) + .invoke(m -> System.out.println("E")) + .chain(mm -> mm.isEmpty() ? Uni.createFrom().voidItem() : + Panache.withTransaction(() -> matchRepository.create(mm)) + .invoke(__ -> matches.addAll(mm.stream().map(MatchEntity::fromModel).toList()))) + .invoke(m -> System.out.println("F")) .call(__ -> SSMatch.sendMatch(connection, matches)) .replaceWithVoid(); } diff --git a/src/main/webapp/src/pages/competition/editor/CMTMatchPanel.jsx b/src/main/webapp/src/pages/competition/editor/CMTMatchPanel.jsx index a4522be..93cb135 100644 --- a/src/main/webapp/src/pages/competition/editor/CMTMatchPanel.jsx +++ b/src/main/webapp/src/pages/competition/editor/CMTMatchPanel.jsx @@ -87,7 +87,7 @@ function CMTMatchPanel({catId, cat, menuActions}) { setLoading(1); sendRequest('getFullCategory', catId) .then((data) => { - setTrees(data.trees.map(d => from_sendTree(d, true))) + setTrees(data.trees.sort((a, b) => a.level - b.level).map(d => from_sendTree(d, true))) let matches2 = []; let combsToAdd = []; @@ -101,7 +101,7 @@ function CMTMatchPanel({catId, cat, menuActions}) { const treeListener = ({data}) => { if (data.length < 1 || data[0].categorie !== catId) return - setTrees(data.map(d => from_sendTree(d, true))) + setTrees(data.sort((a, b) => a.level - b.level).map(d => from_sendTree(d, true))) let matches2 = []; let combsToAdd = [];