diff --git a/api/src/main/java/be/naaturel/boardmateapi/controllers/ChatController.java b/api/src/main/java/be/naaturel/boardmateapi/controllers/ChatController.java index 1a1151ce..dcf354c0 100644 --- a/api/src/main/java/be/naaturel/boardmateapi/controllers/ChatController.java +++ b/api/src/main/java/be/naaturel/boardmateapi/controllers/ChatController.java @@ -17,7 +17,9 @@ import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; +import java.util.HashSet; import java.util.List; +import java.util.Set; import java.util.concurrent.ConcurrentHashMap; @RestController @@ -26,7 +28,7 @@ public class ChatController { private final MessageService messageService; private final WebexService webexService; private final MqttService mqttService; - private final ConcurrentHashMap expectedMessages; + private final Set expectedMessages; @Autowired public ChatController( @@ -36,7 +38,7 @@ public class ChatController { this.messageService = messageService; this.webexService = webexService; this.mqttService = mqttService; - this.expectedMessages = new ConcurrentHashMap<>(); + this.expectedMessages = ConcurrentHashMap.newKeySet(); } @PostMapping("/message/send") @@ -108,10 +110,11 @@ public class ChatController { ObjectMapper mapper = new ObjectMapper(); WebexWebhook payload = mapper.readValue(rawPayload, WebexWebhook.class); + String messageId = payload.getData().getId(); - boolean firstTime = expectedMessages.putIfAbsent(payload.getData().getId(), 1) == null; + boolean firstTime = expectedMessages.add(messageId); if (!firstTime) { - Logger.displayInfo("Rejected message: " + payload.getData().getId()); + Logger.displayInfo("Duplicate or already processed → Rejected: " + messageId); return ResponseEntity.status(HttpStatus.UNAUTHORIZED).body(result); }