Skip to content

Commit 684c786

Browse files
alekszivkoJaroslav380
authored andcommitted
add findAllUsersSortedByMatchCount that is used instead of find all to return users sorted by overall match count by default
remove UserRepository delete method issue: #56
1 parent e505c15 commit 684c786

File tree

6 files changed

+60
-53
lines changed

6 files changed

+60
-53
lines changed

gamertrack-db/src/main/java/com/gepardec/adapter/output/persistence/repository/UserRepositoryImpl.java

Lines changed: 8 additions & 13 deletions
Original file line numberDiff line numberDiff line change
@@ -61,23 +61,18 @@ public void deleteUser(User user) {
6161
}
6262

6363
@Override
64-
public void deleteAllUsers() {
65-
entityManager.createQuery("DELETE FROM UserEntity ").executeUpdate();
66-
log.info("Deleted all users. size: {}", findAllUsers(false).size());
67-
}
68-
69-
@Override
70-
public List<User> findAllUsers(boolean includeDeactivatedUsers) {
64+
public List<User> findAllUsersSortedByMatchCount(boolean includeDeactivated) {
7165
List<UserEntity> resultList = entityManager.createQuery(
72-
"SELECT u FROM UserEntity u " +
73-
"Where(:includeDeactivatedUsers = true OR u.deactivated = false) "
74-
, UserEntity.class)
75-
.setParameter("includeDeactivatedUsers", includeDeactivatedUsers)
66+
"select u from UserEntity u " +
67+
"left join MatchEntity mu on u member of mu.users " +
68+
"where :includeDeactivated = true OR u.deactivated = false " +
69+
"group by u " +
70+
"order by count(u) desc", UserEntity.class)
71+
.setParameter("includeDeactivated", includeDeactivated)
7672
.getResultList();
77-
log.info("Find all users. Returned list of size:{}", resultList.size());
73+
log.info("Find all users sorted by match count in game. Returned list of size:{}", resultList.size());
7874
return resultList.stream().map(userMapper::userEntityToUserModel)
7975
.collect(Collectors.toList());
80-
8176
}
8277

8378
@Override

gamertrack-db/src/test/java/com/gepardec/adapter/output/persistence/repository/UserRepositoryTest.java

Lines changed: 46 additions & 30 deletions
Original file line numberDiff line numberDiff line change
@@ -1,8 +1,15 @@
11
package com.gepardec.adapter.output.persistence.repository;
22

33
import com.gepardec.TestFixtures;
4+
import com.gepardec.adapter.output.persistence.entity.GameEntity;
5+
import com.gepardec.adapter.output.persistence.entity.MatchEntity;
6+
import com.gepardec.adapter.output.persistence.entity.UserEntity;
7+
import com.gepardec.core.repository.GameRepository;
8+
import com.gepardec.core.repository.MatchRepository;
49
import com.gepardec.core.repository.UserRepository;
510
import com.gepardec.core.services.TokenService;
11+
import com.gepardec.model.Game;
12+
import com.gepardec.model.Match;
613
import com.gepardec.model.User;
714
import jakarta.inject.Inject;
815
import jakarta.persistence.EntityManager;
@@ -37,12 +44,18 @@ public class UserRepositoryTest extends GamertrackDbIT {
3744
@Inject
3845
UserRepository userRepository;
3946

47+
@Inject
48+
MatchRepository matchRepository;
49+
50+
@Inject
51+
GameRepository gameRepository;
52+
4053
@Inject
4154
TokenService tokenService;
4255

4356
@BeforeEach
44-
public void before() {
45-
userRepository.deleteAllUsers();
57+
public void before() throws Exception {
58+
removeTableData(MatchEntity.class, GameEntity.class, UserEntity.class);
4659
entityManager.clear();
4760
}
4861

@@ -73,32 +86,15 @@ void ensureDeleteUserWorks() {
7386
User user = TestFixtures.user(1L);
7487
userRepository.saveUser(user);
7588

76-
int sizeBefore = userRepository.findAllUsers(true).size();
89+
int sizeBefore = userRepository.findAllUsersSortedByMatchCount(true).size();
7790

7891
userRepository.deleteUser(user);
7992

8093
assertEquals(1, sizeBefore);
81-
assertEquals(0, userRepository.findAllUsers(true).size());
94+
assertEquals(0, userRepository.findAllUsersSortedByMatchCount(true).size());
8295
assertFalse(userRepository.findUserByToken(user.getToken()).isPresent());
8396
}
8497

85-
@Test
86-
void ensureDeleteAllUsersWorks() {
87-
List<User> users = TestFixtures.users(4);
88-
userRepository.saveUser(users.get(0));
89-
userRepository.saveUser(users.get(1));
90-
userRepository.saveUser(users.get(2));
91-
userRepository.saveUser(users.get(3));
92-
93-
int sizeBefore = userRepository.findAllUsers(true).size();
94-
95-
userRepository.deleteAllUsers();
96-
97-
assertEquals(4, sizeBefore);
98-
assertEquals(0, userRepository.findAllUsers(true).size());
99-
assertFalse(userRepository.findUserByToken(users.get(1).getToken()).isPresent());
100-
}
101-
10298
@Test
10399
void ensureFindAllUsers() {
104100

@@ -110,21 +106,21 @@ void ensureFindAllUsers() {
110106
userRepository.saveUser(user2);
111107
userRepository.saveUser(user3);
112108

113-
assertEquals(2, userRepository.findAllUsers(false).size());
109+
assertEquals(2, userRepository.findAllUsersSortedByMatchCount(false).size());
114110
}
115111

116112
@Test
117113
void ensureFindAllUsersIncludeDeleted() {
118114

119-
User user1 = TestFixtures.user(1L);
120-
User user2 = TestFixtures.user(2L);
121-
User user3 = new User(3L, "Test", "deleted", true,tokenService.generateToken());
115+
User user1 = TestFixtures.user(10L);
116+
User user2 = TestFixtures.user(20L);
117+
User user3 = new User(30L, "Test", "deleted", true,tokenService.generateToken());
122118

123119
userRepository.saveUser(user1);
124120
userRepository.saveUser(user2);
125121
userRepository.saveUser(user3);
126122

127-
assertEquals(3, userRepository.findAllUsers(true).size());
123+
assertEquals(3, userRepository.findAllUsersSortedByMatchCount(true).size());
128124
}
129125

130126
@Test
@@ -138,16 +134,16 @@ void ensureFindUserByTokenWorks() {
138134
userRepository.saveUser(user2);
139135
userRepository.saveUser(user3);
140136

141-
assertEquals(3, userRepository.findAllUsers(true).size());
137+
assertEquals(3, userRepository.findAllUsersSortedByMatchCount(true).size());
142138
assertTrue(userRepository.findUserByToken(user1.getToken()).isPresent());
143139
}
144140

145141
@Test
146142
void ensureFindUserByTokenWorksIncludedDeleted() {
147143

148-
User user1 = TestFixtures.user(1L);
149-
User user2 = TestFixtures.user(2L);
150-
User user3 = TestFixtures.user(3L);
144+
User user1 = TestFixtures.user(10L);
145+
User user2 = TestFixtures.user(20L);
146+
User user3 = TestFixtures.user(30L);
151147
user3.setDeactivated(true);
152148

153149
userRepository.saveUser(user1);
@@ -172,4 +168,24 @@ void ensureExistsByUserTokenWorks() {
172168

173169
}
174170

171+
@Test
172+
void ensureFindAllUsersSortedByMatchCountWorks() {
173+
List<Match> matches = TestFixtures.matches(5);
174+
Game game = gameRepository.saveGame(TestFixtures.games(1).getFirst()).get();
175+
List<User> users = TestFixtures.users(4);
176+
User user1 = userRepository.saveUser(users.getFirst()).get();
177+
User user2 = userRepository.saveUser(users.getLast()).get();
178+
User user3 = userRepository.saveUser(users.get(2)).get();
179+
List<Match> matches2 = TestFixtures.matches(10);
180+
matches.forEach(match -> { match.setUsers(List.of(user1)); match.setGame(game);});
181+
matches2.forEach(match -> { match.setUsers(List.of(user2)); match.setGame(game);});
182+
matches.forEach(matchRepository::saveMatch);
183+
matches2.forEach(matchRepository::saveMatch);
184+
185+
List<Match> matchList = matchRepository.findAllMatches();
186+
var foundUsers = userRepository.findAllUsersSortedByMatchCount(false);
187+
188+
matchList.forEach(System.out::println);
189+
foundUsers.forEach(System.out::println);
190+
}
175191
}

gamertrack-domain/src/main/java/com/gepardec/core/repository/UserRepository.java

Lines changed: 1 addition & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -10,12 +10,7 @@ public interface UserRepository {
1010
Optional<User> saveUser(User user);
1111
Optional<User> updateUser(User user);
1212
void deleteUser(User user);
13-
/**
14-
* deleteAllUsers - Only for testing purposes
15-
*/
16-
void deleteAllUsers();
17-
List<User> findAllUsers(boolean includeDeactivatedUsers);
13+
List<User> findAllUsersSortedByMatchCount(boolean includeDeactivatedUsers);
1814
Optional<User> findUserByToken(String token);
1915
Boolean existsByUserToken(List<String> userTokens);
20-
2116
}

gamertrack-domain/src/main/java/com/gepardec/impl/service/UserServiceImpl.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ public Optional<User> deleteUser(String token) {
8585

8686
@Override
8787
public List<User> findAllUsers(boolean includeDeactivated) {
88-
return userRepository.findAllUsers(includeDeactivated);
88+
return userRepository.findAllUsersSortedByMatchCount(includeDeactivated);
8989
}
9090

9191
@Override

gamertrack-domain/src/test/java/com/gepardec/TestFixtures.java

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,7 @@
55
import com.gepardec.model.Match;
66
import com.gepardec.model.Score;
77
import com.gepardec.model.User;
8+
89
import java.util.ArrayList;
910
import java.util.List;
1011

@@ -17,7 +18,7 @@ public static List<Game> games(int gameCount) {
1718
List<Game> games = new ArrayList<>();
1819

1920
for (int i = 0; i < gameCount; i++) {
20-
games.add(new Game(null, null, "TestGameTitle" + i, "TestGameRules" + i));
21+
games.add(new Game(null, tokenService.generateToken(), "TestGameTitle" + i, "TestGameRules" + i));
2122
}
2223
return games;
2324
}

gamertrack-domain/src/test/java/com/gepardec/impl/service/UserServiceImplTest.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,7 @@ void ensureFindAllUsersWorksAndReturnsAllUsers() {
123123
User user3 = TestFixtures.user(3L);
124124
user3.setDeactivated(true);
125125

126-
when(userRepository.findAllUsers(false)).thenReturn(List.of(user1,user2));
126+
when(userRepository.findAllUsersSortedByMatchCount(false)).thenReturn(List.of(user1,user2));
127127

128128
assertEquals(2, userService.findAllUsers(false).size());
129129
}
@@ -134,7 +134,7 @@ void ensureFindAllUsersIncludeDeletedWorksAndReturnsAllUsersIncludingDeleted() {
134134
User user3 = TestFixtures.user(3L);
135135
user3.setDeactivated(true);
136136

137-
when(userRepository.findAllUsers(true)).thenReturn(List.of(user1, user2, user3));
137+
when(userRepository.findAllUsersSortedByMatchCount(true)).thenReturn(List.of(user1, user2, user3));
138138

139139
assertEquals(3, userService.findAllUsers(true).size());
140140
}

0 commit comments

Comments
 (0)