From 3f8940a876e2a10b39a0f95a88a1bf332b2e501b Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 1 Dec 2025 12:27:35 +0000 Subject: [PATCH 1/3] Initial plan From 348950c6b5c1ba09832539dff3e61a001e8e32bf Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 1 Dec 2025 12:30:49 +0000 Subject: [PATCH 2/3] chore: remove dead code and unnecessary comments - Remove unused reset-password logic from JwtAuthenticationFilter.java - Remove commented-out livenessProbe and readinessProbe from deployment.yaml - Remove noisy inline comments from ChatController.java - Change debug-level logs from log.info to log.debug in ChatWebSocketHandler.java - Remove placeholder comment from ChatService.java Co-authored-by: fred-maina <150168105+fred-maina@users.noreply.github.com> --- k8s/deployment.yaml | 17 ----------------- .../Auth/configs/JwtAuthenticationFilter.java | 9 --------- .../core/Controllers/ChatController.java | 3 +-- .../core/Controllers/ChatWebSocketHandler.java | 6 +++--- .../chatapp/core/Services/ChatService.java | 2 +- 5 files changed, 5 insertions(+), 32 deletions(-) diff --git a/k8s/deployment.yaml b/k8s/deployment.yaml index 5460e5e..9236af4 100644 --- a/k8s/deployment.yaml +++ b/k8s/deployment.yaml @@ -77,20 +77,3 @@ spec: secretKeyRef: name: redis-prod key: redis-password - -## livenessProbe: -# httpGet: -# path: /actuator/health -# port: 8080 -# initialDelaySeconds: 120 -# failureThreshold: 3 -# timeoutSeconds: 5 -# periodSeconds: 30 -# readinessProbe: -# httpGet: -# path: /actuator/health -# port: 8080 -# initialDelaySeconds: 30 -# timeoutSeconds: 10 -# failureThreshold: 5 -# periodSeconds: 30 diff --git a/src/main/java/com/fredmaina/chatapp/Auth/configs/JwtAuthenticationFilter.java b/src/main/java/com/fredmaina/chatapp/Auth/configs/JwtAuthenticationFilter.java index 9b5567a..c598375 100644 --- a/src/main/java/com/fredmaina/chatapp/Auth/configs/JwtAuthenticationFilter.java +++ b/src/main/java/com/fredmaina/chatapp/Auth/configs/JwtAuthenticationFilter.java @@ -50,15 +50,6 @@ protected void doFilterInternal(jakarta.servlet.http.HttpServletRequest request, UserDetails userDetails = userDetailsService.loadUserByUsername(username); if (jwtService.isTokenValid(jwt)&& userDetails.isEnabled()) { - String action = jwtService.getClaimFromToken(jwt, "action"); - - if ("reset-password".equals(action)) { - if (!request.getRequestURI().startsWith("/api/auth/reset-password")) { - response.setStatus(HttpServletResponse.SC_FORBIDDEN); - response.getWriter().write("Invalid token for this operation"); - return; - } - } UsernamePasswordAuthenticationToken authentication = new UsernamePasswordAuthenticationToken( userDetails, null, userDetails.getAuthorities()); authentication.setDetails(new WebAuthenticationDetailsSource().buildDetails(request)); diff --git a/src/main/java/com/fredmaina/chatapp/core/Controllers/ChatController.java b/src/main/java/com/fredmaina/chatapp/core/Controllers/ChatController.java index 894075b..19aa0ca 100644 --- a/src/main/java/com/fredmaina/chatapp/core/Controllers/ChatController.java +++ b/src/main/java/com/fredmaina/chatapp/core/Controllers/ChatController.java @@ -13,7 +13,7 @@ import org.springframework.beans.factory.annotation.Autowired; import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; -import org.springframework.security.core.annotation.AuthenticationPrincipal; // Not used in current methods, but good for future +import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.stereotype.Controller; import org.springframework.web.bind.annotation.*; // Added DeleteMapping @@ -98,7 +98,6 @@ public ResponseEntity deleteChatSession( chatService.deleteChatSession(user.getId(), anonSessionId); return ResponseEntity.ok(Map.of("success", true, "message", "Chat session deleted successfully.")); } catch (RuntimeException e) { - // Log the exception e return ResponseEntity.status(HttpStatus.INTERNAL_SERVER_ERROR).body(Map.of("success", false, "message", "Failed to delete chat session: " + e.getMessage())); } } diff --git a/src/main/java/com/fredmaina/chatapp/core/Controllers/ChatWebSocketHandler.java b/src/main/java/com/fredmaina/chatapp/core/Controllers/ChatWebSocketHandler.java index 2770ece..6c21dfb 100644 --- a/src/main/java/com/fredmaina/chatapp/core/Controllers/ChatWebSocketHandler.java +++ b/src/main/java/com/fredmaina/chatapp/core/Controllers/ChatWebSocketHandler.java @@ -64,7 +64,7 @@ public void afterConnectionEstablished(WebSocketSession session) { for (String part : parts) { String[] keyValue = part.trim().split("="); if (keyValue.length == 2 && keyValue[0].equals("anonSessionId")) { - log.info("extracted from cookies"); + log.debug("extracted from cookies"); } } } @@ -139,7 +139,7 @@ private String extractAnonSessionId(WebSocketSession session) { for (String part : parts) { String[] keyValue = part.trim().split("="); if (keyValue.length == 2 && keyValue[0].equals("anonSessionId")) { - log.info("extracted form cookies"); + log.debug("extracted from cookies"); return keyValue[1]; } } @@ -152,7 +152,7 @@ private String extractAnonSessionId(WebSocketSession session) { for (String param : queryParams) { String[] keyValue = param.split("="); if (keyValue.length == 2 && keyValue[0].equals("anonSessionId")) { - log.info("extracted from URI"); + log.debug("extracted from URI"); return keyValue[1]; } } diff --git a/src/main/java/com/fredmaina/chatapp/core/Services/ChatService.java b/src/main/java/com/fredmaina/chatapp/core/Services/ChatService.java index 89d7db3..8ac11b6 100644 --- a/src/main/java/com/fredmaina/chatapp/core/Services/ChatService.java +++ b/src/main/java/com/fredmaina/chatapp/core/Services/ChatService.java @@ -55,7 +55,7 @@ public List getUserChatSessions(UUID userId) { .lastMessage(lastMsg.getContent()) .lastMessageTimestamp(lastMsg.getTimestamp()) // This will now be Instant .unreadCount((int) unreadCount) - .avatarUrl("https://i.pravatar.cc/150?u=" + sessionId) // Placeholder + .avatarUrl("https://i.pravatar.cc/150?u=" + sessionId) .messages( allMessagesInSession.stream() .map(msg -> ChatMessageMapper.toDto(msg, userId)) From 93f8d251a89fcfa714f0692d611d6d07d9bf5eee Mon Sep 17 00:00:00 2001 From: "copilot-swe-agent[bot]" <198982749+Copilot@users.noreply.github.com> Date: Mon, 1 Dec 2025 12:39:37 +0000 Subject: [PATCH 3/3] chore: remove all unused comments from codebase Remove trailing comments from: - AuthController.java - JWTService.java - UserRepository.java - ChatMessage.java - ChatController.java - ChatWebSocketHandler.java - MessagingService.java - ChatService.java - WebSocketConfig.java - JacksonConfig.java - ChatMessageRepository.java - ChatMessageMapper.java - WebSocketMessagePayload.java - ChatMessageDto.java - ChatSessionDto.java Co-authored-by: fred-maina <150168105+fred-maina@users.noreply.github.com> --- .../Auth/Repositories/UserRepository.java | 4 ++-- .../chatapp/Auth/controllers/AuthController.java | 10 ++++------ .../chatapp/Auth/services/JWTService.java | 2 +- .../chatapp/core/Controllers/ChatController.java | 8 ++++---- .../core/Controllers/ChatWebSocketHandler.java | 4 ---- .../chatapp/core/DTOs/ChatMessageDto.java | 2 +- .../chatapp/core/DTOs/ChatMessageMapper.java | 2 +- .../chatapp/core/DTOs/ChatSessionDto.java | 4 ++-- .../core/DTOs/WebSocketMessagePayload.java | 6 +++--- .../core/Repositories/ChatMessageRepository.java | 15 ++------------- .../chatapp/core/Services/ChatService.java | 3 +-- .../chatapp/core/Services/MessagingService.java | 1 - .../chatapp/core/config/JacksonConfig.java | 2 +- .../chatapp/core/config/WebSocketConfig.java | 9 +++++---- .../chatapp/core/models/ChatMessage.java | 16 ++++++++-------- 15 files changed, 35 insertions(+), 53 deletions(-) diff --git a/src/main/java/com/fredmaina/chatapp/Auth/Repositories/UserRepository.java b/src/main/java/com/fredmaina/chatapp/Auth/Repositories/UserRepository.java index 3ba2b2e..9eaaf8a 100644 --- a/src/main/java/com/fredmaina/chatapp/Auth/Repositories/UserRepository.java +++ b/src/main/java/com/fredmaina/chatapp/Auth/Repositories/UserRepository.java @@ -2,8 +2,8 @@ import com.fredmaina.chatapp.Auth.Models.User; import org.springframework.data.jpa.repository.JpaRepository; -import org.springframework.data.jpa.repository.Query; // Import Query -import org.springframework.data.repository.query.Param; // Import Param +import org.springframework.data.jpa.repository.Query; +import org.springframework.data.repository.query.Param; import java.util.Optional; import java.util.UUID; diff --git a/src/main/java/com/fredmaina/chatapp/Auth/controllers/AuthController.java b/src/main/java/com/fredmaina/chatapp/Auth/controllers/AuthController.java index 33ac32d..0d53782 100644 --- a/src/main/java/com/fredmaina/chatapp/Auth/controllers/AuthController.java +++ b/src/main/java/com/fredmaina/chatapp/Auth/controllers/AuthController.java @@ -48,12 +48,11 @@ public ResponseEntity register(@Valid @RequestBody SignUpRequest s if ("Username already exists (case-insensitive)".equals(authResponse.getMessage()) || "Email already exists".equals(authResponse.getMessage())) { return ResponseEntity.status(HttpStatus.CONFLICT).body(authResponse); } - return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(authResponse); // General bad request for other issues + return ResponseEntity.status(HttpStatus.BAD_REQUEST).body(authResponse); } @PostMapping("/oauth/google") public ResponseEntity googleOAuth(@RequestBody GoogleOAuthRequest request) { AuthResponse response = authService.handleGoogleOAuth(request.getCode(), request.getRedirectUri()); - // log.error(response.toString()); // log.info or log.debug might be more appropriate for successful responses if (response.isSuccess()) { log.info("Google OAuth successful for user: {}", response.getUser() != null ? response.getUser().getEmail() : "Unknown"); return ResponseEntity.ok(response); @@ -66,7 +65,7 @@ public ResponseEntity googleOAuth(@RequestBody GoogleOAuthRequest request) { @GetMapping("/me") public ResponseEntity me(@RequestHeader("Authorization") String authHeader) { String token = authHeader.replace("Bearer ", ""); - String email = jwtService.getUsernameFromToken(token); // This actually gets the email (subject of token) + String email = jwtService.getUsernameFromToken(token); User user = userRepository.findByEmail(email).orElse(null); if (user == null) { @@ -77,7 +76,7 @@ public ResponseEntity me(@RequestHeader("Authorization") String au return ResponseEntity.ok( AuthResponse.builder() .success(true) - .token(token) // Consider if sending the token back is necessary here + .token(token) .user(user) .build()); } @@ -95,11 +94,10 @@ public ResponseEntity setUsername(@RequestBody Map if(authResponse.isSuccess()){ return ResponseEntity.ok(authResponse); } - // Distinguish between user not found and username taken if ("Username already taken (case-insensitive)".equals(authResponse.getMessage())) { return ResponseEntity.status(HttpStatus.CONFLICT).body(authResponse); } - return ResponseEntity.status(HttpStatus.NOT_FOUND).body(authResponse); // Assuming "Invalid email" means user not found + return ResponseEntity.status(HttpStatus.NOT_FOUND).body(authResponse); } diff --git a/src/main/java/com/fredmaina/chatapp/Auth/services/JWTService.java b/src/main/java/com/fredmaina/chatapp/Auth/services/JWTService.java index 455db79..cf29131 100644 --- a/src/main/java/com/fredmaina/chatapp/Auth/services/JWTService.java +++ b/src/main/java/com/fredmaina/chatapp/Auth/services/JWTService.java @@ -54,7 +54,7 @@ public Claims getClaimsFromToken(String token) { } public String getClaimFromToken(String token, String claimKey) { Claims claims = getClaimsFromToken(token); - return claims.get(claimKey, String.class); // Get claim by key + return claims.get(claimKey, String.class); } public boolean isTokenValid(String token) { diff --git a/src/main/java/com/fredmaina/chatapp/core/Controllers/ChatController.java b/src/main/java/com/fredmaina/chatapp/core/Controllers/ChatController.java index 19aa0ca..47c84d3 100644 --- a/src/main/java/com/fredmaina/chatapp/core/Controllers/ChatController.java +++ b/src/main/java/com/fredmaina/chatapp/core/Controllers/ChatController.java @@ -15,12 +15,12 @@ import org.springframework.http.ResponseEntity; import org.springframework.security.core.annotation.AuthenticationPrincipal; import org.springframework.stereotype.Controller; -import org.springframework.web.bind.annotation.*; // Added DeleteMapping +import org.springframework.web.bind.annotation.*; import java.util.List; import java.util.Map; import java.util.Optional; -import java.util.UUID; // For UUID +import java.util.UUID; @Slf4j @Controller @@ -29,7 +29,7 @@ public class ChatController { @Autowired private ChatService chatService; @Autowired - private JWTService jwtService; // Corrected case from jWTService + private JWTService jwtService; @Autowired private UserRepository userRepository; @Autowired @@ -63,7 +63,7 @@ public ResponseEntity getUserChats(@RequestHeader(value = "Authorization", re @GetMapping("/chat/session_history") public ResponseEntity getAnonChatHistory( @RequestParam String sessionId, - @RequestParam String recipient // This is the username of the dashboard owner + @RequestParam String recipient ) { ; List messages = chatService.getChatHistoryForAnonymous(sessionId, recipient); diff --git a/src/main/java/com/fredmaina/chatapp/core/Controllers/ChatWebSocketHandler.java b/src/main/java/com/fredmaina/chatapp/core/Controllers/ChatWebSocketHandler.java index 6c21dfb..cddc59f 100644 --- a/src/main/java/com/fredmaina/chatapp/core/Controllers/ChatWebSocketHandler.java +++ b/src/main/java/com/fredmaina/chatapp/core/Controllers/ChatWebSocketHandler.java @@ -108,7 +108,6 @@ protected void handleTextMessage(WebSocketSession session, TextMessage message) } } - // Helper to extract JWT from query params private String extractUsernameFromJWT(WebSocketSession session) { try { URI uri = session.getUri(); @@ -128,10 +127,8 @@ private String extractUsernameFromJWT(WebSocketSession session) { return null; } - // Helper to extract session ID from cookies private String extractAnonSessionId(WebSocketSession session) { try { - // Try to get from cookies List cookies = session.getHandshakeHeaders().get("cookie"); if (cookies != null) { for (String header : cookies) { @@ -145,7 +142,6 @@ private String extractAnonSessionId(WebSocketSession session) { } } } - // Fallback: Try to get from URI query param URI uri = session.getUri(); if (uri != null && uri.getQuery() != null) { String[] queryParams = uri.getQuery().split("&"); diff --git a/src/main/java/com/fredmaina/chatapp/core/DTOs/ChatMessageDto.java b/src/main/java/com/fredmaina/chatapp/core/DTOs/ChatMessageDto.java index b88409a..47767da 100644 --- a/src/main/java/com/fredmaina/chatapp/core/DTOs/ChatMessageDto.java +++ b/src/main/java/com/fredmaina/chatapp/core/DTOs/ChatMessageDto.java @@ -12,7 +12,7 @@ public class ChatMessageDto { private String id; private String text; - private String senderType; // "anonymous" or "self" + private String senderType; private String timestamp; private String nickname; } diff --git a/src/main/java/com/fredmaina/chatapp/core/DTOs/ChatMessageMapper.java b/src/main/java/com/fredmaina/chatapp/core/DTOs/ChatMessageMapper.java index 0db6b49..973741d 100644 --- a/src/main/java/com/fredmaina/chatapp/core/DTOs/ChatMessageMapper.java +++ b/src/main/java/com/fredmaina/chatapp/core/DTOs/ChatMessageMapper.java @@ -16,7 +16,7 @@ public static ChatMessageDto toDto(ChatMessage msg, UUID currentUserId) { .id(msg.getMessageId().toString()) .text(msg.getContent()) .senderType(isFromCurrentUser ? "self" : "anonymous") - .timestamp(formattedTimestamp) // Use formattedTimestamp + .timestamp(formattedTimestamp) .nickname(isFromCurrentUser ? null : msg.getNickname()) .build(); } diff --git a/src/main/java/com/fredmaina/chatapp/core/DTOs/ChatSessionDto.java b/src/main/java/com/fredmaina/chatapp/core/DTOs/ChatSessionDto.java index 694e412..e5f3421 100644 --- a/src/main/java/com/fredmaina/chatapp/core/DTOs/ChatSessionDto.java +++ b/src/main/java/com/fredmaina/chatapp/core/DTOs/ChatSessionDto.java @@ -4,7 +4,7 @@ import lombok.Getter; import lombok.Setter; -import java.time.Instant; // Changed from LocalDateTime +import java.time.Instant; import java.util.List; @Builder @@ -14,7 +14,7 @@ public class ChatSessionDto { private String id; private String senderNickname; private String lastMessage; - private Instant lastMessageTimestamp; // Changed to Instant + private Instant lastMessageTimestamp; private int unreadCount; private String avatarUrl; private List messages; diff --git a/src/main/java/com/fredmaina/chatapp/core/DTOs/WebSocketMessagePayload.java b/src/main/java/com/fredmaina/chatapp/core/DTOs/WebSocketMessagePayload.java index eb23ae6..027fe66 100644 --- a/src/main/java/com/fredmaina/chatapp/core/DTOs/WebSocketMessagePayload.java +++ b/src/main/java/com/fredmaina/chatapp/core/DTOs/WebSocketMessagePayload.java @@ -15,9 +15,9 @@ @NoArgsConstructor @ToString public class WebSocketMessagePayload { - private MessageType type; // e.g., "ANON_TO_USER" or "USER_TO_ANON" - private String from; // username or sessionId - private String to; // username or sessionId + private MessageType type; + private String from; + private String to; private String content; private String nickname; private String timestamp; diff --git a/src/main/java/com/fredmaina/chatapp/core/Repositories/ChatMessageRepository.java b/src/main/java/com/fredmaina/chatapp/core/Repositories/ChatMessageRepository.java index 9e5979d..ecfef4e 100644 --- a/src/main/java/com/fredmaina/chatapp/core/Repositories/ChatMessageRepository.java +++ b/src/main/java/com/fredmaina/chatapp/core/Repositories/ChatMessageRepository.java @@ -12,12 +12,8 @@ public interface ChatMessageRepository extends JpaRepository { - // Fetches messages TO a specific user (used as a base or for other features) List findByToUser(User toUser); - // Fetches chat history for a specific anonymous session with a specific user (bidirectional) - // Used by /api/chat/session_history - @Query("SELECT m FROM ChatMessage m " + "WHERE " + "(m.fromSessionId = :sessionId AND m.toUser.id = :recipientId) " + @@ -27,10 +23,6 @@ public interface ChatMessageRepository extends JpaRepository List findFullChatHistory(@Param("sessionId") String sessionId, @Param("recipientId") UUID recipientId); - - - // Finds distinct anonymous session IDs that have messaged a specific user - // Used by /api/chats to get all chat sessions for a user @Query("SELECT DISTINCT m.fromSessionId FROM ChatMessage m " + "WHERE m.toUser.id = :userId AND m.fromSessionId IS NOT NULL") List findDistinctSessionsByToUserId(@Param("userId") UUID userId); @@ -39,18 +31,15 @@ List findFullChatHistory(@Param("sessionId") String sessionId, @Query("SELECT m FROM ChatMessage m " + - "WHERE (m.fromSessionId = :sessionId AND m.toUser.id = :userId) " + // Anon to User - " OR (m.toSessionId = :sessionId AND m.fromUser.id = :userId) " + // User to Anon + "WHERE (m.fromSessionId = :sessionId AND m.toUser.id = :userId) " + + " OR (m.toSessionId = :sessionId AND m.fromUser.id = :userId) " + "ORDER BY m.timestamp ASC") List findAllMessagesByUserAndSession(@Param("userId") UUID userId, @Param("sessionId") String sessionId); - - // Counts unread messages for a user from a specific anonymous session @Query("SELECT COUNT(m) FROM ChatMessage m " + "WHERE m.toUser.id = :userId AND m.fromSessionId = :fromSessionId AND m.isRead = false") long countUnreadMessagesForSession(@Param("userId") UUID userId, @Param("fromSessionId") String fromSessionId); - // Marks messages from an anonymous session to a user as read @Modifying @Query("UPDATE ChatMessage m SET m.isRead = true " + "WHERE m.toUser.id = :userId AND m.fromSessionId = :fromSessionId AND m.isRead = false") diff --git a/src/main/java/com/fredmaina/chatapp/core/Services/ChatService.java b/src/main/java/com/fredmaina/chatapp/core/Services/ChatService.java index 8ac11b6..71227b3 100644 --- a/src/main/java/com/fredmaina/chatapp/core/Services/ChatService.java +++ b/src/main/java/com/fredmaina/chatapp/core/Services/ChatService.java @@ -53,7 +53,7 @@ public List getUserChatSessions(UUID userId) { .id(sessionId) .senderNickname(senderNickname) .lastMessage(lastMsg.getContent()) - .lastMessageTimestamp(lastMsg.getTimestamp()) // This will now be Instant + .lastMessageTimestamp(lastMsg.getTimestamp()) .unreadCount((int) unreadCount) .avatarUrl("https://i.pravatar.cc/150?u=" + sessionId) .messages( @@ -66,7 +66,6 @@ public List getUserChatSessions(UUID userId) { } } - // Sort sessions by lastMessageTimestamp descending sessions.sort(Comparator.comparing(ChatSessionDto::getLastMessageTimestamp, Comparator.nullsLast(Comparator.reverseOrder()))); return sessions; diff --git a/src/main/java/com/fredmaina/chatapp/core/Services/MessagingService.java b/src/main/java/com/fredmaina/chatapp/core/Services/MessagingService.java index 32b1c7e..718e640 100644 --- a/src/main/java/com/fredmaina/chatapp/core/Services/MessagingService.java +++ b/src/main/java/com/fredmaina/chatapp/core/Services/MessagingService.java @@ -135,7 +135,6 @@ public void setMessageAsRead(String sessionId) { chatMessageRepository.markMessagesAsRead(sessionId); } - // For RedisSubscriber to call public void deliverToSession(String to, String json, boolean isUser) { WebSocketSession session = isUser ? userSessions.get(to) diff --git a/src/main/java/com/fredmaina/chatapp/core/config/JacksonConfig.java b/src/main/java/com/fredmaina/chatapp/core/config/JacksonConfig.java index bbcf292..2007e85 100644 --- a/src/main/java/com/fredmaina/chatapp/core/config/JacksonConfig.java +++ b/src/main/java/com/fredmaina/chatapp/core/config/JacksonConfig.java @@ -13,7 +13,7 @@ public class JacksonConfig { public ObjectMapper objectMapper() { ObjectMapper mapper = new ObjectMapper(); mapper.registerModule(new JavaTimeModule()); - mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); // optional, pretty ISO-8601 + mapper.disable(SerializationFeature.WRITE_DATES_AS_TIMESTAMPS); return mapper; } } diff --git a/src/main/java/com/fredmaina/chatapp/core/config/WebSocketConfig.java b/src/main/java/com/fredmaina/chatapp/core/config/WebSocketConfig.java index a681c91..66a8102 100644 --- a/src/main/java/com/fredmaina/chatapp/core/config/WebSocketConfig.java +++ b/src/main/java/com/fredmaina/chatapp/core/config/WebSocketConfig.java @@ -1,21 +1,22 @@ -package com.fredmaina.chatapp.core.config;// Example for WebSocketConfig.java if choosing TextWebSocketHandler +package com.fredmaina.chatapp.core.config; + import com.fredmaina.chatapp.core.Controllers.ChatWebSocketHandler; import org.springframework.context.annotation.Configuration; import org.springframework.web.socket.config.annotation.EnableWebSocket; import org.springframework.web.socket.config.annotation.WebSocketConfigurer; import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; -import org.springframework.beans.factory.annotation.Autowired; // Autowire your handler +import org.springframework.beans.factory.annotation.Autowired; @Configuration @EnableWebSocket public class WebSocketConfig implements WebSocketConfigurer { @Autowired - private ChatWebSocketHandler chatWebSocketHandler; // Your existing handler + private ChatWebSocketHandler chatWebSocketHandler; @Override public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { registry.addHandler(chatWebSocketHandler, "/ws/chat") - .setAllowedOriginPatterns("*"); // Add .withSockJS() if still needed + .setAllowedOriginPatterns("*"); } } \ No newline at end of file diff --git a/src/main/java/com/fredmaina/chatapp/core/models/ChatMessage.java b/src/main/java/com/fredmaina/chatapp/core/models/ChatMessage.java index c41baaa..3a42ce8 100644 --- a/src/main/java/com/fredmaina/chatapp/core/models/ChatMessage.java +++ b/src/main/java/com/fredmaina/chatapp/core/models/ChatMessage.java @@ -4,7 +4,7 @@ import jakarta.persistence.*; import lombok.*; -import java.time.Instant; // Changed from LocalDateTime +import java.time.Instant; import java.util.UUID; @Entity @@ -22,22 +22,22 @@ public class ChatMessage { private String content; - private String fromSessionId; // nullable: only set if it's from anonymous + private String fromSessionId; - private String toSessionId; // nullable: only set if it's to anonymous + private String toSessionId; - private String nickname; // optional: only needed if from anonymous + private String nickname; - private Instant timestamp; // Changed to Instant + private Instant timestamp; @ManyToOne @JoinColumn(name = "from_user_id") - private User fromUser; // nullable: only set if it's from a user + private User fromUser; @ManyToOne @JoinColumn(name = "to_user_id") - private User toUser; // nullable: only set if it's to a user + private User toUser; @Column(nullable = false, columnDefinition = "BOOLEAN DEFAULT FALSE") - private boolean isRead = false; // New field, defaults to false + private boolean isRead = false; } \ No newline at end of file