From 4bfa6e845d9c9930e64dfa320e31e83746d88e03 Mon Sep 17 00:00:00 2001 From: Thibaut Valentin Date: Tue, 10 Mar 2026 13:59:35 +0100 Subject: [PATCH] fix: club guest mixing in result --- .../ffsaf/domain/service/ResultService.java | 66 ++++++++++++------- src/main/webapp/public/locales/fr/result.json | 2 +- 2 files changed, 45 insertions(+), 23 deletions(-) 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 d1ed494..8922cc1 100644 --- a/src/main/java/fr/titionfire/ffsaf/domain/service/ResultService.java +++ b/src/main/java/fr/titionfire/ffsaf/domain/service/ResultService.java @@ -615,21 +615,32 @@ public class ResultService { new ArrayList<>(), membreModel) ))); } else { - return clubRepository.findById(id).chain(clubModel -> - registerRepository.list("competition.uuid = ?1 AND membre.club = ?2", uuid, clubModel) - .chain(registers -> matchRepository.list( - "SELECT DISTINCT m FROM MatchModel m LEFT JOIN m.c1_guest.comb c1g LEFT JOIN m.c2_guest.comb c2g " + - "WHERE m.category.compet.uuid = ?1 AND (m.c1_id IN ?2 OR m.c2_id IN ?2 OR c1g IN ?2 OR c2g IN ?2)", - uuid, registers.stream().map(RegisterModel::getMembre).toList()) - .chain(matchModels -> cardRepository.list("competition.uuid = ?1", uuid) - .map(cards -> + return cardRepository.list("competition.uuid = ?1", uuid) + .chain(cards -> clubRepository.findById(id).chain(clubModel -> + registerRepository.list("competition.uuid = ?1 AND membre.club = ?2", uuid, clubModel) + .chain(registers -> matchRepository.list( + "SELECT DISTINCT m FROM MatchModel m LEFT JOIN m.c1_guest.comb c1g LEFT JOIN m.c2_guest.comb c2g " + + "WHERE m.category.compet.uuid = ?1 AND (m.c1_id IN ?2 OR m.c2_id IN ?2 OR c1g IN ?2 OR c2g IN ?2)", + uuid, registers.stream().map(RegisterModel::getMembre).toList()) + .map(matchModels -> matchModels.stream() + .map(m -> new MatchModelExtend(m, cards))) + .chain(s -> competitionGuestRepository.list( + "competition.uuid = ?1 AND club = ?2", uuid, clubModel.getName()) + .chain(guests -> matchRepository.list( + "SELECT DISTINCT m FROM MatchModel m LEFT JOIN m.c1_guest.guest c1g LEFT JOIN m.c2_guest.guest c2g " + + "WHERE m.category.compet.uuid = ?1 AND (m.c1_guest IN ?2 OR m.c2_guest IN ?2 OR c1g IN ?2 OR c2g IN ?2)", + uuid, guests) + .map(mm -> new Pair<>(guests, Stream.concat(s, mm.stream() + .map(m -> new MatchModelExtend(m, cards))) + .distinct().toList())) + )) + .map(p -> getClubArray2(clubModel.getName(), - registers.stream().map(o -> (CombModel) o.getMembre()) - .toList(), - matchModels.stream() - .map(m -> new MatchModelExtend(m, cards)).toList(), - registers, membreModel) - + Stream.concat( + registers.stream().map(RegisterModel::getMembre), + p.getKey().stream() + ).toList(), + p.getValue(), registers, membreModel) )))); } } @@ -776,27 +787,38 @@ public class ResultService { .collect().asList(); }) .map(categoryData -> { - HashMap clubMap = new HashMap<>(); + HashMap clubMap = new HashMap<>(); + + categoryData.forEach(c -> c.getClassement().stream().map(ResultCategoryData.ClassementData::comb) + .filter(Objects::nonNull) + .distinct() + .map(comb -> { + if (comb instanceof MembreModel membreModel2) { + return (membreModel2.getClub() != null) ? membreModel2.getClub().getName() : ""; + } else if (comb instanceof CompetitionGuestModel guestModel) { + return guestModel.getClub(); + } + return ""; + }) + .filter(s -> s != null && !s.isBlank() && !s.equals("Team")) + .distinct() + .forEach(clubName -> clubMap.putIfAbsent(clubName, new ClubClassement(clubName)))); categoryData.forEach(c -> c.getClassement().forEach(classementData -> { if (classementData.rank() > 3) return; if (classementData.comb() != null) { - long clubId = 0L; String clubName = ""; if (classementData.comb() instanceof MembreModel membreModel2) { - clubId = (membreModel2.getClub() != null) ? membreModel2.getClub().getId() : 0; clubName = (membreModel2.getClub() != null) ? membreModel2.getClub().getName() : ""; } else if (classementData.comb() instanceof CompetitionGuestModel guestModel) { - if (guestModel.getClub() != null && !guestModel.getClub().isBlank()) - clubId = getClubTempId(guestModel.getClub()); clubName = guestModel.getClub(); } - if (clubId != 0) { - clubMap.putIfAbsent(clubId, new ClubClassement(clubName)); - ClubClassement entity = clubMap.get(clubId); + if (clubName != null && !clubName.isBlank() + && !clubName.equals("Team") && clubMap.containsKey(clubName)) { + ClubClassement entity = clubMap.get(clubName); entity.score[classementData.rank() - 1]++; entity.tt_score += 4 - classementData.rank(); } diff --git a/src/main/webapp/public/locales/fr/result.json b/src/main/webapp/public/locales/fr/result.json index d0fe75e..255d2d5 100644 --- a/src/main/webapp/public/locales/fr/result.json +++ b/src/main/webapp/public/locales/fr/result.json @@ -15,7 +15,7 @@ "chargement": "Chargement", "classement": "Classement", "classementClub": "Classement club", - "classementDesClub": "Classement des club", + "classementDesClub": "Classement des clubs", "classementFinal": "Classement final", "club": "Club", "combattant": "Combattant", -- 2.49.0