Skip to content

Commit 73b4e51

Browse files
Merge pull request #638 from softwaremagico/623-european-scoring-takes-also-into-account-points-lost
623 european scoring takes also into account points lost
2 parents 35fe98b + 15dbe66 commit 73b4e51

File tree

22 files changed

+181
-31
lines changed

22 files changed

+181
-31
lines changed

README.md

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
[![GitHub last commit](https://img.shields.io/github/last-commit/softwaremagico/KendoTournamentManager)](https://github.com/softwaremagico/KendoTournamentManager)
1010
[![Issues](https://img.shields.io/github/issues/softwaremagico/KendoTournamentManager.svg)](https://github.com/softwaremagico/KendoTournamentManager/issues)
1111
[![CircleCI](https://circleci.com/gh/softwaremagico/KendoTournamentManager.svg?style=shield)](https://circleci.com/gh/softwaremagico/KendoTournamentManager)
12-
[![Time](https://img.shields.io/badge/development-708.5h-blueviolet.svg)]()
12+
[![Time](https://img.shields.io/badge/development-710h-blueviolet.svg)]()
1313

1414
[![Powered by](https://img.shields.io/badge/powered%20by%20java-orange.svg?logo=OpenJDK&logoColor=white)]()
1515
[![Vulnerabilities](https://sonarcloud.io/api/project_badges/measure?project=kendo-tournament-backend&metric=vulnerabilities)](https://sonarcloud.io/summary/new_code?id=kendo-tournament-backend)

backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/controller/models/ScoreOfCompetitorDTO.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -34,6 +34,7 @@ public class ScoreOfCompetitorDTO {
3434
private Integer drawDuels = null;
3535
private Integer untieDuels = null;
3636
private Integer hits = null;
37+
private Integer hitsLost = null;
3738
private Integer untieHits = null;
3839
private Integer duelsDone = null;
3940
private Integer wonFights = null;
@@ -92,6 +93,14 @@ public void setHits(Integer hits) {
9293
this.hits = hits;
9394
}
9495

96+
public Integer getHitsLost() {
97+
return hitsLost;
98+
}
99+
100+
public void setHitsLost(Integer hitsLost) {
101+
this.hitsLost = hitsLost;
102+
}
103+
95104
public Integer getUntieHits() {
96105
return untieHits;
97106
}

backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/controller/models/ScoreOfTeamDTO.java

Lines changed: 9 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -47,6 +47,7 @@ public class ScoreOfTeamDTO extends ElementDTO {
4747
private Integer drawDuels = null;
4848
private Integer untieDuels = null;
4949
private Integer hits = null;
50+
private Integer hitsLost = null;
5051
private Integer level = null;
5152
private Integer sortingIndex = null;
5253

@@ -213,6 +214,14 @@ public void setHits(Integer hits) {
213214
this.hits = hits;
214215
}
215216

217+
public Integer getHitsLost() {
218+
return hitsLost;
219+
}
220+
221+
public void setHitsLost(Integer hitsLost) {
222+
this.hitsLost = hitsLost;
223+
}
224+
216225
public Integer getLevel() {
217226
return level;
218227
}

backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/score/ScoreOfCompetitor.java

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -42,6 +42,7 @@ public class ScoreOfCompetitor {
4242
private Integer drawDuels = null;
4343
private Integer untieDuels = null;
4444
private Integer hits = null;
45+
private Integer hitsLost = null;
4546
private Integer untieHits = null;
4647
private Integer duelsDone = null;
4748
private Integer wonFights = null;
@@ -84,6 +85,7 @@ public void update() {
8485
wonDuels = null;
8586
drawDuels = null;
8687
hits = null;
88+
hitsLost = null;
8789
totalFights = null;
8890
setDuelsWon();
8991
setDuelsDraw();
@@ -93,6 +95,7 @@ public void update() {
9395
setUntieDuels();
9496
setUntieHits();
9597
setHits();
98+
setHitsLost();
9699
setTotalFights();
97100
}
98101

@@ -170,6 +173,15 @@ public void setHits() {
170173
}
171174
}
172175

176+
public void setHitsLost() {
177+
hitsLost = 0;
178+
for (final Fight fight : fights) {
179+
if (fight != null) {
180+
hitsLost += fight.getScoreAgainst(competitor);
181+
}
182+
}
183+
}
184+
173185
public void setUntieDuels() {
174186
untieDuels = 0;
175187
unties.forEach(duel -> {
@@ -215,6 +227,14 @@ public void setHits(Integer hits) {
215227
this.hits = hits;
216228
}
217229

230+
public Integer getHitsLost() {
231+
return hitsLost;
232+
}
233+
234+
public void setHitsLost(Integer hitsLost) {
235+
this.hitsLost = hitsLost;
236+
}
237+
218238
public Integer getDuelsDone() {
219239
return duelsDone;
220240
}
@@ -273,7 +293,8 @@ public void setTotalFights(Integer totalFights) {
273293

274294
@Override
275295
public String toString() {
276-
return "{" + NameUtils.getLastnameName(competitor) + " D:" + getWonDuels() + "/" + getDrawDuels() + ", H:" + getHits() + "}";
296+
return "{" + NameUtils.getLastnameName(competitor) + " D:" + getWonDuels() + "/"
297+
+ getDrawDuels() + ", H:" + getHits() + ", HL:" + getHitsLost() + "}";
277298
}
278299

279300
}

backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/score/ScoreOfCompetitorEuropean.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -43,6 +43,11 @@ public int compare(ScoreOfCompetitor scoreOfCompetitor1, ScoreOfCompetitor score
4343
return scoreOfCompetitor2.getHits().compareTo(scoreOfCompetitor1.getHits());
4444
}
4545

46+
// Fewer hits lost
47+
if (!Objects.equals(scoreOfCompetitor1.getHitsLost(), scoreOfCompetitor2.getHitsLost())) {
48+
return scoreOfCompetitor1.getDuelsDone().compareTo(scoreOfCompetitor2.getDuelsDone());
49+
}
50+
4651
// More duels done with same score is negative.
4752
if (!Objects.equals(scoreOfCompetitor1.getDuelsDone(), scoreOfCompetitor2.getDuelsDone())) {
4853
return scoreOfCompetitor1.getDuelsDone().compareTo(scoreOfCompetitor2.getDuelsDone());

backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/score/ScoreOfTeam.java

Lines changed: 17 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,7 @@ public class ScoreOfTeam {
4545
private Integer drawDuels = null;
4646
private Integer untieDuels = null;
4747
private Integer hits = null;
48+
private Integer hitsLost = null;
4849
private Integer level = null;
4950
private Integer sortingIndex = null;
5051

@@ -81,6 +82,7 @@ public void update() {
8182
drawDuels = null;
8283
untieDuels = null;
8384
hits = null;
85+
hitsLost = null;
8486
level = null;
8587
fightsDone = null;
8688
setLevel();
@@ -91,6 +93,7 @@ public void update() {
9193
setFightsDone();
9294
setUntieDuels();
9395
setHits();
96+
setHitsLost();
9497
}
9598

9699
public void setLevel() {
@@ -129,6 +132,10 @@ public void setHits() {
129132
hits = fights.stream().mapToInt(fight -> fight.getScore(team)).sum();
130133
}
131134

135+
public void setHitsLost() {
136+
hitsLost = fights.stream().mapToInt(fight -> fight.getScoreAgainst(team)).sum();
137+
}
138+
132139
public void setUntieDuels() {
133140
untieDuels = 0;
134141
unties.forEach(duel -> {
@@ -211,6 +218,14 @@ public void setHits(Integer hits) {
211218
this.hits = hits;
212219
}
213220

221+
public Integer getHitsLost() {
222+
return hitsLost;
223+
}
224+
225+
public void setHitsLost(Integer hitsLost) {
226+
this.hitsLost = hitsLost;
227+
}
228+
214229
public Integer getLevel() {
215230
return level;
216231
}
@@ -230,6 +245,7 @@ public void setSortingIndex(Integer sortingIndex) {
230245
@Override
231246
public String toString() {
232247
return "{" + team.getName() + ": Fights:" + getWonFights() + "/" + getDrawFights() + ", Duels: "
233-
+ getWonDuels() + "/" + getDrawDuels() + ", hits:" + getHits() + "*".repeat(Math.max(0, getUntieDuels())) + "}";
248+
+ getWonDuels() + "/" + getDrawDuels() + ", hits:" + getHits() + "*".repeat(Math.max(0, getUntieDuels()))
249+
+ ", hits lost:" + getHitsLost() + "}";
234250
}
235251
}

backend/kendo-tournament-core/src/main/java/com/softwaremagico/kt/core/score/ScoreOfTeamEuropean.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -59,6 +59,11 @@ public int compare(ScoreOfTeam scoreOfTeam1, ScoreOfTeam scoreOfTeam2) {
5959
return scoreOfTeam2.getHits().compareTo(scoreOfTeam1.getHits());
6060
}
6161

62+
// Fewer hits lost
63+
if (!Objects.equals(scoreOfTeam1.getHitsLost(), scoreOfTeam2.getHitsLost())) {
64+
return scoreOfTeam1.getHitsLost().compareTo(scoreOfTeam2.getHitsLost());
65+
}
66+
6267
return scoreOfTeam2.getUntieDuels().compareTo(scoreOfTeam1.getUntieDuels());
6368
}
6469
}

backend/kendo-tournament-core/src/test/java/com/softwaremagico/kt/core/tests/ScoreTest.java

Lines changed: 51 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -105,12 +105,6 @@ public class ScoreTest extends AbstractTestNGSpringContextTests {
105105
@Autowired
106106
private DuelProvider duelProvider;
107107

108-
@Autowired
109-
private GroupConverter groupConverter;
110-
111-
@Autowired
112-
private TeamConverter teamConverter;
113-
114108
@Autowired
115109
private RankingProvider rankingProvider;
116110

@@ -270,6 +264,57 @@ public void testEuropeanScore() {
270264
resetGroup(groupProvider.getGroups(tournament).get(0), null);
271265
}
272266

267+
@Test(dependsOnMethods = {"createFights"})
268+
public void testEuropeanScoreHitLost() {
269+
tournament.setTournamentScore(new TournamentScore(ScoreType.EUROPEAN));
270+
tournament = tournamentProvider.save(tournament);
271+
272+
final Group groupTest = groupProvider.getGroups(tournament).get(0);
273+
274+
// Team1 vs Team2
275+
groupTest.getFights().get(0).getDuels().get(0).addCompetitor1Score(Score.MEN);
276+
groupTest.getFights().get(0).getDuels().get(0).addCompetitor2Score(Score.MEN);
277+
groupTest.getFights().get(0).getDuels().get(0).addCompetitor2Score(Score.MEN);
278+
// Team3 vs Team2
279+
groupTest.getFights().get(1).getDuels().get(0).addCompetitor1Score(Score.MEN);
280+
groupTest.getFights().get(1).getDuels().get(0).addCompetitor2Score(Score.MEN);
281+
groupTest.getFights().get(1).getDuels().get(1).addCompetitor1Score(Score.MEN);
282+
groupTest.getFights().get(1).getDuels().get(1).addCompetitor2Score(Score.MEN);
283+
// Team3 vs Team4
284+
groupTest.getFights().get(2).getDuels().get(0).addCompetitor1Score(Score.MEN);
285+
groupTest.getFights().get(2).getDuels().get(0).addCompetitor2Score(Score.MEN);
286+
// Team1 vs Team4
287+
groupTest.getFights().get(3).getDuels().get(0).addCompetitor1Score(Score.MEN);
288+
groupTest.getFights().get(3).getDuels().get(0).addCompetitor1Score(Score.MEN);
289+
groupTest.getFights().get(3).getDuels().get(0).addCompetitor2Score(Score.MEN);
290+
// Team1 vs Team3
291+
groupTest.getFights().get(4).getDuels().get(0).addCompetitor1Score(Score.MEN);
292+
groupTest.getFights().get(4).getDuels().get(0).addCompetitor2Score(Score.MEN);
293+
// Team4 vs Team2
294+
groupTest.getFights().get(5).getDuels().get(0).addCompetitor1Score(Score.MEN);
295+
groupTest.getFights().get(5).getDuels().get(0).addCompetitor1Score(Score.MEN);
296+
297+
// Total Team1 1/1F 1/7D 4H 4HL
298+
// Total Team2 1/1F 1/7D 4H 5HL
299+
// Total Team3 0/3F 0/9D 4H 4HL
300+
// Total Team4 1/1F 1/7D 4H 3HL
301+
302+
// finish fights.
303+
groupTest.getFights().forEach(fight -> {
304+
fight.getDuels().forEach(duel -> duel.setFinished(true));
305+
fightProvider.save(fight);
306+
});
307+
308+
// Team04 has fewer hits lost.
309+
List<ScoreOfTeam> scores = rankingProvider.getTeamsScoreRanking(tournament);
310+
Assert.assertEquals(scores.get(0).getTeam(), teamProvider.get(tournament, "Team04").get());
311+
Assert.assertEquals(scores.get(1).getTeam(), teamProvider.get(tournament, "Team01").get());
312+
Assert.assertEquals(scores.get(2).getTeam(), teamProvider.get(tournament, "Team02").get());
313+
Assert.assertEquals(scores.get(3).getTeam(), teamProvider.get(tournament, "Team03").get());
314+
315+
resetGroup(groupProvider.getGroups(tournament).get(0), null);
316+
}
317+
273318
@Test(dependsOnMethods = {"createFights"})
274319
public void testInternationalScore() {
275320
tournament.setTournamentScore(new TournamentScore(ScoreType.INTERNATIONAL));

backend/kendo-tournament-persistence/src/main/java/com/softwaremagico/kt/persistence/entities/Fight.java

Lines changed: 19 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -215,6 +215,15 @@ public Integer getScore(Participant competitor) {
215215
return score;
216216
}
217217

218+
public Integer getScoreAgainst(Participant competitor) {
219+
int score = 0;
220+
score += getDuels().stream().filter(duel ->
221+
(Objects.equals(duel.getCompetitor1(), competitor))).mapToInt(Duel::getCompetitor2ScoreValue).sum();
222+
score += getDuels().stream().filter(duel ->
223+
(Objects.equals(duel.getCompetitor2(), competitor))).mapToInt(Duel::getCompetitor1ScoreValue).sum();
224+
return score;
225+
}
226+
218227
public Integer getDrawDuels(Participant competitor) {
219228
return (int) getDuels().stream().filter(duel -> duel.getWinner() == 0
220229
&& (Objects.equals(duel.getCompetitor1(), competitor) || Objects.equals(duel.getCompetitor2(), competitor))).count();
@@ -271,6 +280,16 @@ public Integer getScore(Team team) {
271280
return 0;
272281
}
273282

283+
public Integer getScoreAgainst(Team team) {
284+
if (Objects.equals(team1, team)) {
285+
return getScoreTeam2();
286+
}
287+
if (Objects.equals(team2, team)) {
288+
return getScoreTeam1();
289+
}
290+
return 0;
291+
}
292+
274293
public Integer getScoreTeam1() {
275294
return getDuels().stream().mapToInt(Duel::getCompetitor1ScoreValue).sum();
276295
}

backend/kendo-tournament-rest/src/test/java/com/softwaremagico/kt/websockets/BasicWebsocketsTests.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,6 @@
2424
import com.softwaremagico.kt.EchoWebSocketController;
2525
import com.softwaremagico.kt.core.providers.AuthenticatedUserProvider;
2626
import com.softwaremagico.kt.persistence.entities.AuthenticatedUser;
27-
import com.softwaremagico.kt.persistence.entities.IAuthenticatedUser;
2827
import com.softwaremagico.kt.rest.controllers.AuthenticatedUserController;
2928
import com.softwaremagico.kt.rest.security.JwtTokenUtil;
3029
import org.springframework.beans.factory.annotation.Autowired;
@@ -103,7 +102,7 @@ public void authentication() {
103102
authenticatedUser = authenticatedUserController.createUser(null, USER_NAME, USER_FIRST_NAME, USER_LAST_NAME, USER_PASSWORD, USER_ROLES);
104103

105104
headers = new WebSocketHttpHeaders();
106-
headers.set("Authorization", "Bearer " + jwtTokenUtil.generateAccessToken((IAuthenticatedUser) authenticatedUser, "127.0.0.1"));
105+
headers.set("Authorization", "Bearer " + jwtTokenUtil.generateAccessToken(authenticatedUser, "127.0.0.1"));
107106
}
108107

109108

0 commit comments

Comments
 (0)