From cc752cb88ab58b0911473a838231e1b91b5441da Mon Sep 17 00:00:00 2001 From: Thuan ngo Date: Sun, 8 Dec 2024 23:47:53 +0700 Subject: [PATCH] chat app with react ts --- .../configuration/WebSocketConfig.java | 51 ++++++++++--------- .../elearning/domain/chat/ChatService.java | 4 ++ .../elearning/domain/chat/Message.java | 25 +++++++++ .../domain/chat/MessageController.java | 48 +++++++++++++++++ .../elearning/domain/classroom/Classroom.java | 5 +- .../classroom/ClassroomServiceImpl.java | 5 +- .../{ => domain}/reference/Reference.java | 2 +- .../reference/ReferenceController.java | 5 +- .../reference/ReferenceGetVM.java | 2 +- .../reference/ReferencePostVM.java | 2 +- .../reference/ReferenceRepository.java | 2 +- .../reference/ReferenceService.java | 2 +- .../reference/ReferenceServiceImpl.java | 2 +- .../{ => domain}/reference/ReferenceVM.java | 2 +- .../domain/referencefile/ReferenceFile.java | 3 +- .../ReferenceFileServiceImpl.java | 5 +- 16 files changed, 119 insertions(+), 46 deletions(-) create mode 100644 src/main/java/com/backend/elearning/domain/chat/ChatService.java create mode 100644 src/main/java/com/backend/elearning/domain/chat/Message.java create mode 100644 src/main/java/com/backend/elearning/domain/chat/MessageController.java rename src/main/java/com/backend/elearning/{ => domain}/reference/Reference.java (92%) rename src/main/java/com/backend/elearning/{ => domain}/reference/ReferenceController.java (85%) rename src/main/java/com/backend/elearning/{ => domain}/reference/ReferenceGetVM.java (94%) rename src/main/java/com/backend/elearning/{ => domain}/reference/ReferencePostVM.java (65%) rename src/main/java/com/backend/elearning/{ => domain}/reference/ReferenceRepository.java (81%) rename src/main/java/com/backend/elearning/{ => domain}/reference/ReferenceService.java (81%) rename src/main/java/com/backend/elearning/{ => domain}/reference/ReferenceServiceImpl.java (97%) rename src/main/java/com/backend/elearning/{ => domain}/reference/ReferenceVM.java (82%) diff --git a/src/main/java/com/backend/elearning/configuration/WebSocketConfig.java b/src/main/java/com/backend/elearning/configuration/WebSocketConfig.java index c8b9d41..cfea907 100644 --- a/src/main/java/com/backend/elearning/configuration/WebSocketConfig.java +++ b/src/main/java/com/backend/elearning/configuration/WebSocketConfig.java @@ -1,23 +1,28 @@ -//package com.backend.elearning.configuration; -// -//import org.springframework.context.annotation.Configuration; -//import org.springframework.messaging.simp.config.MessageBrokerRegistry; -//import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; -//import org.springframework.web.socket.config.annotation.StompEndpointRegistry; -//import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; -// -//@Configuration -//@EnableWebSocketMessageBroker -//public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { -// -// @Override -// public void registerStompEndpoints(StompEndpointRegistry registry) { -// registry.addEndpoint("/ws").withSockJS(); -// } -// -// @Override -// public void configureMessageBroker(MessageBrokerRegistry registry) { -// registry.setApplicationDestinationPrefixes("/app"); -// registry.enableSimpleBroker("/topic"); -// } -//} \ No newline at end of file +package com.backend.elearning.configuration; + +import org.springframework.context.annotation.Configuration; +import org.springframework.messaging.simp.config.MessageBrokerRegistry; +import org.springframework.web.socket.config.annotation.EnableWebSocketMessageBroker; +import org.springframework.web.socket.config.annotation.StompEndpointRegistry; +import org.springframework.web.socket.config.annotation.WebSocketMessageBrokerConfigurer; + +@Configuration +@EnableWebSocketMessageBroker +public class WebSocketConfig implements WebSocketMessageBrokerConfigurer { + + @Override + public void configureMessageBroker(MessageBrokerRegistry config) { + config.enableSimpleBroker("/topic"); // Topic for broadcasting + config.setApplicationDestinationPrefixes("/app"); // Prefix for client requests + } + + @Override + public void registerStompEndpoints(StompEndpointRegistry registry) { + registry.addEndpoint("/ws") // Plain WebSocket endpoint + .setAllowedOrigins("*"); // Allow frontend origin + + registry.addEndpoint("/sockjs/ws") // SockJS fallback endpoint + .setAllowedOrigins("*") + .withSockJS(); + } +} \ No newline at end of file diff --git a/src/main/java/com/backend/elearning/domain/chat/ChatService.java b/src/main/java/com/backend/elearning/domain/chat/ChatService.java new file mode 100644 index 0000000..cb8b57f --- /dev/null +++ b/src/main/java/com/backend/elearning/domain/chat/ChatService.java @@ -0,0 +1,4 @@ +package com.backend.elearning.domain.chat; + +public class ChatService { +} diff --git a/src/main/java/com/backend/elearning/domain/chat/Message.java b/src/main/java/com/backend/elearning/domain/chat/Message.java new file mode 100644 index 0000000..f1f7632 --- /dev/null +++ b/src/main/java/com/backend/elearning/domain/chat/Message.java @@ -0,0 +1,25 @@ +package com.backend.elearning.domain.chat; + +import java.time.LocalDateTime; + +public class Message { + private String sender; + private String content; + + // Getters and Setters + public String getSender() { + return sender; + } + + public void setSender(String sender) { + this.sender = sender; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } +} diff --git a/src/main/java/com/backend/elearning/domain/chat/MessageController.java b/src/main/java/com/backend/elearning/domain/chat/MessageController.java new file mode 100644 index 0000000..3bef28b --- /dev/null +++ b/src/main/java/com/backend/elearning/domain/chat/MessageController.java @@ -0,0 +1,48 @@ +package com.backend.elearning.domain.chat; + +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.messaging.handler.annotation.DestinationVariable; +import org.springframework.messaging.simp.SimpMessagingTemplate; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RestController; + +import org.springframework.messaging.handler.annotation.MessageMapping; +import org.springframework.messaging.handler.annotation.SendTo; +import org.springframework.stereotype.Controller; + +@Controller +public class MessageController { + private final SimpMessagingTemplate messagingTemplate; + + public MessageController(SimpMessagingTemplate messagingTemplate) { + this.messagingTemplate = messagingTemplate; + } + @MessageMapping("/chat/{roomId}") // Match room-specific endpoints + public void sendMessage(@DestinationVariable String roomId, Message message) { + // Broadcast message to room-specific topic + messagingTemplate.convertAndSend("/topic/rooms/" + roomId, message); + } + + public static class Message { + private String sender; + private String content; + + // Getters and setters + public String getSender() { + return sender; + } + + public void setSender(String sender) { + this.sender = sender; + } + + public String getContent() { + return content; + } + + public void setContent(String content) { + this.content = content; + } + } +} diff --git a/src/main/java/com/backend/elearning/domain/classroom/Classroom.java b/src/main/java/com/backend/elearning/domain/classroom/Classroom.java index 9bddc8f..8c0d19b 100644 --- a/src/main/java/com/backend/elearning/domain/classroom/Classroom.java +++ b/src/main/java/com/backend/elearning/domain/classroom/Classroom.java @@ -1,11 +1,8 @@ package com.backend.elearning.domain.classroom; -import com.backend.elearning.domain.common.CustomAuditingEntityListener; import com.backend.elearning.domain.course.Course; -import com.backend.elearning.domain.lecture.Lecture; import com.backend.elearning.domain.meeting.Meeting; -import com.backend.elearning.domain.quiz.Quiz; -import com.backend.elearning.reference.Reference; +import com.backend.elearning.domain.reference.Reference; import jakarta.persistence.*; import lombok.*; diff --git a/src/main/java/com/backend/elearning/domain/classroom/ClassroomServiceImpl.java b/src/main/java/com/backend/elearning/domain/classroom/ClassroomServiceImpl.java index ea18295..b521aeb 100644 --- a/src/main/java/com/backend/elearning/domain/classroom/ClassroomServiceImpl.java +++ b/src/main/java/com/backend/elearning/domain/classroom/ClassroomServiceImpl.java @@ -9,8 +9,8 @@ import com.backend.elearning.domain.referencefile.ReferenceFileService; import com.backend.elearning.domain.referencefile.ReferenceFileVM; import com.backend.elearning.exception.NotFoundException; -import com.backend.elearning.reference.Reference; -import com.backend.elearning.reference.ReferenceGetVM; +import com.backend.elearning.domain.reference.Reference; +import com.backend.elearning.domain.reference.ReferenceGetVM; import com.backend.elearning.utils.Constants; import org.springframework.stereotype.Service; @@ -18,7 +18,6 @@ import java.util.Comparator; import java.util.List; -import static com.backend.elearning.utils.DateTimeUtils.convertLocalDateTimeToMonthYearText; import static com.backend.elearning.utils.DateTimeUtils.convertLocalDateTimeToString; @Service diff --git a/src/main/java/com/backend/elearning/reference/Reference.java b/src/main/java/com/backend/elearning/domain/reference/Reference.java similarity index 92% rename from src/main/java/com/backend/elearning/reference/Reference.java rename to src/main/java/com/backend/elearning/domain/reference/Reference.java index 4a0564a..368fd70 100644 --- a/src/main/java/com/backend/elearning/reference/Reference.java +++ b/src/main/java/com/backend/elearning/domain/reference/Reference.java @@ -1,4 +1,4 @@ -package com.backend.elearning.reference; +package com.backend.elearning.domain.reference; import com.backend.elearning.domain.classroom.Classroom; import com.backend.elearning.domain.common.AbstractAuditEntity; diff --git a/src/main/java/com/backend/elearning/reference/ReferenceController.java b/src/main/java/com/backend/elearning/domain/reference/ReferenceController.java similarity index 85% rename from src/main/java/com/backend/elearning/reference/ReferenceController.java rename to src/main/java/com/backend/elearning/domain/reference/ReferenceController.java index f9f732b..a8f1912 100644 --- a/src/main/java/com/backend/elearning/reference/ReferenceController.java +++ b/src/main/java/com/backend/elearning/domain/reference/ReferenceController.java @@ -1,8 +1,5 @@ -package com.backend.elearning.reference; +package com.backend.elearning.domain.reference; -import com.backend.elearning.domain.meeting.MeetingPostVM; -import com.backend.elearning.domain.meeting.MeetingService; -import com.backend.elearning.domain.meeting.MeetingVM; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.*; diff --git a/src/main/java/com/backend/elearning/reference/ReferenceGetVM.java b/src/main/java/com/backend/elearning/domain/reference/ReferenceGetVM.java similarity index 94% rename from src/main/java/com/backend/elearning/reference/ReferenceGetVM.java rename to src/main/java/com/backend/elearning/domain/reference/ReferenceGetVM.java index 04aa1eb..cb83ebf 100644 --- a/src/main/java/com/backend/elearning/reference/ReferenceGetVM.java +++ b/src/main/java/com/backend/elearning/domain/reference/ReferenceGetVM.java @@ -1,4 +1,4 @@ -package com.backend.elearning.reference; +package com.backend.elearning.domain.reference; import com.backend.elearning.domain.common.Event; import com.backend.elearning.domain.common.EventType; diff --git a/src/main/java/com/backend/elearning/reference/ReferencePostVM.java b/src/main/java/com/backend/elearning/domain/reference/ReferencePostVM.java similarity index 65% rename from src/main/java/com/backend/elearning/reference/ReferencePostVM.java rename to src/main/java/com/backend/elearning/domain/reference/ReferencePostVM.java index 15dcc0c..41780ef 100644 --- a/src/main/java/com/backend/elearning/reference/ReferencePostVM.java +++ b/src/main/java/com/backend/elearning/domain/reference/ReferencePostVM.java @@ -1,4 +1,4 @@ -package com.backend.elearning.reference; +package com.backend.elearning.domain.reference; public record ReferencePostVM( String description, diff --git a/src/main/java/com/backend/elearning/reference/ReferenceRepository.java b/src/main/java/com/backend/elearning/domain/reference/ReferenceRepository.java similarity index 81% rename from src/main/java/com/backend/elearning/reference/ReferenceRepository.java rename to src/main/java/com/backend/elearning/domain/reference/ReferenceRepository.java index 8fbb3b9..3bfb0a6 100644 --- a/src/main/java/com/backend/elearning/reference/ReferenceRepository.java +++ b/src/main/java/com/backend/elearning/domain/reference/ReferenceRepository.java @@ -1,4 +1,4 @@ -package com.backend.elearning.reference; +package com.backend.elearning.domain.reference; import org.springframework.data.jpa.repository.JpaRepository; import org.springframework.stereotype.Repository; diff --git a/src/main/java/com/backend/elearning/reference/ReferenceService.java b/src/main/java/com/backend/elearning/domain/reference/ReferenceService.java similarity index 81% rename from src/main/java/com/backend/elearning/reference/ReferenceService.java rename to src/main/java/com/backend/elearning/domain/reference/ReferenceService.java index 6d785df..2f4bc56 100644 --- a/src/main/java/com/backend/elearning/reference/ReferenceService.java +++ b/src/main/java/com/backend/elearning/domain/reference/ReferenceService.java @@ -1,4 +1,4 @@ -package com.backend.elearning.reference; +package com.backend.elearning.domain.reference; public interface ReferenceService { diff --git a/src/main/java/com/backend/elearning/reference/ReferenceServiceImpl.java b/src/main/java/com/backend/elearning/domain/reference/ReferenceServiceImpl.java similarity index 97% rename from src/main/java/com/backend/elearning/reference/ReferenceServiceImpl.java rename to src/main/java/com/backend/elearning/domain/reference/ReferenceServiceImpl.java index 6859efb..daea824 100644 --- a/src/main/java/com/backend/elearning/reference/ReferenceServiceImpl.java +++ b/src/main/java/com/backend/elearning/domain/reference/ReferenceServiceImpl.java @@ -1,4 +1,4 @@ -package com.backend.elearning.reference; +package com.backend.elearning.domain.reference; import com.backend.elearning.domain.classroom.Classroom; import com.backend.elearning.domain.classroom.ClassroomRepository; diff --git a/src/main/java/com/backend/elearning/reference/ReferenceVM.java b/src/main/java/com/backend/elearning/domain/reference/ReferenceVM.java similarity index 82% rename from src/main/java/com/backend/elearning/reference/ReferenceVM.java rename to src/main/java/com/backend/elearning/domain/reference/ReferenceVM.java index 44d6063..a813738 100644 --- a/src/main/java/com/backend/elearning/reference/ReferenceVM.java +++ b/src/main/java/com/backend/elearning/domain/reference/ReferenceVM.java @@ -1,4 +1,4 @@ -package com.backend.elearning.reference; +package com.backend.elearning.domain.reference; public record ReferenceVM ( Long id, diff --git a/src/main/java/com/backend/elearning/domain/referencefile/ReferenceFile.java b/src/main/java/com/backend/elearning/domain/referencefile/ReferenceFile.java index 48ab8ec..6adb5d9 100644 --- a/src/main/java/com/backend/elearning/domain/referencefile/ReferenceFile.java +++ b/src/main/java/com/backend/elearning/domain/referencefile/ReferenceFile.java @@ -1,7 +1,6 @@ package com.backend.elearning.domain.referencefile; -import com.backend.elearning.domain.classroom.Classroom; -import com.backend.elearning.reference.Reference; +import com.backend.elearning.domain.reference.Reference; import jakarta.persistence.*; import lombok.*; diff --git a/src/main/java/com/backend/elearning/domain/referencefile/ReferenceFileServiceImpl.java b/src/main/java/com/backend/elearning/domain/referencefile/ReferenceFileServiceImpl.java index e789eee..a90db67 100644 --- a/src/main/java/com/backend/elearning/domain/referencefile/ReferenceFileServiceImpl.java +++ b/src/main/java/com/backend/elearning/domain/referencefile/ReferenceFileServiceImpl.java @@ -1,8 +1,7 @@ package com.backend.elearning.domain.referencefile; -import com.backend.elearning.reference.Reference; -import com.backend.elearning.reference.ReferenceRepository; -import com.backend.elearning.reference.ReferenceVM; +import com.backend.elearning.domain.reference.Reference; +import com.backend.elearning.domain.reference.ReferenceRepository; import org.springframework.stereotype.Service; import java.util.List;