diff --git a/pom.xml b/pom.xml
index de78097..0f0d447 100644
--- a/pom.xml
+++ b/pom.xml
@@ -108,6 +108,15 @@
spring-boot-maven-plugin
${spring-boot.version}
+
+
+ org.springframework.boot
+ spring-boot-maven-plugin
+ ${spring-boot.version}
+
+ hse.java.practice.chatstomp.ChatStompApplication
+
+
diff --git a/src/main/java/hse/java/practice/chatstomp/controller/ChatController.java b/src/main/java/hse/java/practice/chatstomp/controller/ChatController.java
new file mode 100644
index 0000000..43143be
--- /dev/null
+++ b/src/main/java/hse/java/practice/chatstomp/controller/ChatController.java
@@ -0,0 +1,42 @@
+package hse.java.practice.chatstomp.controller;
+import hse.java.practice.chatstomp.model.ChatMessage;
+
+import org.springframework.messaging.handler.annotation.MessageMapping;
+import org.springframework.messaging.handler.annotation.Payload;
+import org.springframework.messaging.handler.annotation.SendTo;
+import org.springframework.stereotype.Controller;
+import org.springframework.web.bind.annotation.GetMapping;
+import org.springframework.web.bind.annotation.ResponseBody;
+
+import java.time.LocalDateTime;
+import java.time.format.DateTimeFormatter;
+import java.util.List;
+import java.util.concurrent.CopyOnWriteArrayList;
+
+@Controller
+public class ChatController {
+
+ private final DateTimeFormatter formatter = DateTimeFormatter.ofPattern("HH:mm:ss");
+ private final List history = new CopyOnWriteArrayList<>(); // потокобезопасный список
+
+ @GetMapping("/")
+ public String index() {
+ return "chat";
+ }
+
+ @MessageMapping("/send") // когда придет соо вызови этот метод
+ @SendTo("/topic/messages") // отправь всем кто подписан
+ public ChatMessage sendMessage(@Payload ChatMessage msg) {
+ String timestamp = LocalDateTime.now().format(formatter);
+ ChatMessage message = new ChatMessage(msg.sender(), msg.text(), timestamp);
+ history.add(message);
+ return message;
+ }
+
+ @GetMapping("/history")
+ @ResponseBody
+ public List getHistory() {
+ return history;
+ }
+
+}
diff --git a/src/main/java/hse/java/practice/chatstomp/model/ChatMessage.java b/src/main/java/hse/java/practice/chatstomp/model/ChatMessage.java
new file mode 100644
index 0000000..df18af0
--- /dev/null
+++ b/src/main/java/hse/java/practice/chatstomp/model/ChatMessage.java
@@ -0,0 +1,3 @@
+package hse.java.practice.chatstomp.model;
+
+public record ChatMessage(String sender, String text, String timestamp) {}
diff --git a/src/test/java/hse/java/chatstomp/ChatStompEdgeCasesTest.java b/src/test/java/hse/java/chatstomp/ChatStompEdgeCasesTest.java
index f1f3c52..30a0772 100644
--- a/src/test/java/hse/java/chatstomp/ChatStompEdgeCasesTest.java
+++ b/src/test/java/hse/java/chatstomp/ChatStompEdgeCasesTest.java
@@ -111,7 +111,9 @@ void multipleMessagesFromOneClient() throws Exception {
session.subscribe("/topic/messages", mapHandler(queue));
session.send("/app/send", Map.of("sender", "A", "text", "m1"));
+ Thread.sleep(100);
session.send("/app/send", Map.of("sender", "A", "text", "m2"));
+ Thread.sleep(100);
session.send("/app/send", Map.of("sender", "A", "text", "m3"));
List received = new ArrayList<>();