Skip to content

Commit adff788

Browse files
committed
Factory method for event types
1 parent 4b8a21f commit adff788

2 files changed

Lines changed: 47 additions & 11 deletions

File tree

server/src/main/java/com/auction/server/controller/UserController.java

Lines changed: 20 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -166,9 +166,11 @@ public void handleBanUser(Context ctx) {
166166
long durationSeconds = permanent ? 0 : Long.parseLong(durationParam);
167167
User user = userService.banUser(id, durationSeconds, permanent, getAuthenticatedUser(ctx));
168168
if (banExpiryScheduler != null) banExpiryScheduler.scheduleIfTemporary(user);
169-
List<String> revertedItemIds = revertWinningBidsForUnavailableUser(id);
169+
List<String> affectedItemIds = new ArrayList<>();
170+
affectedItemIds.addAll(cancelAutoBidsForUser(id));
171+
affectedItemIds.addAll(revertWinningBidsForUnavailableUser(id));
170172
broadcastUserBanned(id);
171-
revertedItemIds.forEach(this::broadcastItemUpdated);
173+
affectedItemIds.forEach(this::broadcastItemUpdated);
172174
ctx.json(userToMap(user));
173175
}
174176

@@ -200,12 +202,26 @@ public void handleChangePassword(Context ctx) {
200202
public void handleDeleteUser(Context ctx) {
201203
String id = ctx.pathParam("id");
202204
userService.deleteAccount(id, getAuthenticatedUser(ctx));
203-
List<String> revertedItemIds = revertWinningBidsForUnavailableUser(id);
205+
List<String> affectedItemIds = new ArrayList<>();
206+
affectedItemIds.addAll(cancelAutoBidsForUser(id));
207+
affectedItemIds.addAll(revertWinningBidsForUnavailableUser(id));
204208
broadcastUserDeleted(id);
205-
revertedItemIds.forEach(this::broadcastItemUpdated);
209+
affectedItemIds.forEach(this::broadcastItemUpdated);
206210
ctx.json(Map.of("message", "User deleted."));
207211
}
208212

213+
private List<String> cancelAutoBidsForUser(String userId) {
214+
if (autoBidRepo == null) return List.of();
215+
216+
List<AutoBid> userAutoBids = autoBidRepo.findByUserId(userId);
217+
List<String> affectedItemIds = new ArrayList<>();
218+
for (AutoBid autoBid : userAutoBids) {
219+
autoBidRepo.delete(autoBid.getUserId(), autoBid.getItemId());
220+
affectedItemIds.add(autoBid.getItemId());
221+
}
222+
return affectedItemIds;
223+
}
224+
209225
private List<String> revertWinningBidsForUnavailableUser(String userId) {
210226
if (itemRepo == null || bidRepo == null) return List.of();
211227

server/src/main/java/com/auction/server/events/ItemEventBroadcaster.java

Lines changed: 27 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,15 @@ public class ItemEventBroadcaster {
99

1010
private final Set<WsContext> clients = ConcurrentHashMap.newKeySet();
1111

12+
private enum EventType {
13+
ITEM_UPDATED,
14+
ITEMS_CHANGED,
15+
USER_UPDATED,
16+
USER_BANNED,
17+
USER_DELETED,
18+
USERS_CHANGED
19+
}
20+
1221
public void register(Javalin app) {
1322
app.ws(
1423
"/api/events",
@@ -20,30 +29,41 @@ public void register(Javalin app) {
2029
}
2130

2231
public void broadcastItemUpdated(String itemId) {
23-
broadcast("{\"type\":\"ITEM_UPDATED\",\"itemId\":\"" + escapeJson(itemId) + "\"}");
32+
broadcast(createEvent(EventType.ITEM_UPDATED, "itemId", itemId));
2433
}
2534

2635
public void broadcastItemsChanged() {
27-
broadcast("{\"type\":\"ITEMS_CHANGED\"}");
36+
broadcast(createEvent(EventType.ITEMS_CHANGED));
2837
}
2938

3039
public void broadcastUserUpdated(String userId) {
31-
broadcast("{\"type\":\"USER_UPDATED\",\"userId\":\"" + escapeJson(userId) + "\"}");
40+
broadcast(createEvent(EventType.USER_UPDATED, "userId", userId));
3241
broadcastUsersChanged();
3342
}
3443

3544
public void broadcastUserBanned(String userId) {
36-
broadcast("{\"type\":\"USER_BANNED\",\"userId\":\"" + escapeJson(userId) + "\"}");
45+
broadcast(createEvent(EventType.USER_BANNED, "userId", userId));
3746
broadcastUsersChanged();
3847
}
3948

4049
public void broadcastUserDeleted(String userId) {
41-
broadcast("{\"type\":\"USER_DELETED\",\"userId\":\"" + escapeJson(userId) + "\"}");
50+
broadcast(createEvent(EventType.USER_DELETED, "userId", userId));
4251
broadcastUsersChanged();
4352
}
4453

4554
public void broadcastUsersChanged() {
46-
broadcast("{\"type\":\"USERS_CHANGED\"}");
55+
broadcast(createEvent(EventType.USERS_CHANGED));
56+
}
57+
58+
private String createEvent(EventType type) {
59+
return "{\"type\":\"" + type.name() + "\"}";
60+
}
61+
62+
private String createEvent(EventType type, String key, String value) {
63+
return "{"
64+
+ "\"type\":\"" + type.name() + "\","
65+
+ "\"" + escapeJson(key) + "\":\"" + escapeJson(value) + "\""
66+
+ "}";
4767
}
4868

4969
private void broadcast(String message) {
@@ -59,4 +79,4 @@ private void broadcast(String message) {
5979
private String escapeJson(String value) {
6080
return value == null ? "" : value.replace("\\", "\\\\").replace("\"", "\\\"");
6181
}
62-
}
82+
}

0 commit comments

Comments
 (0)