From c054ef19176c80618adb5d88fd1d0820eec682a2 Mon Sep 17 00:00:00 2001 From: AmimiHamza Date: Thu, 23 May 2024 02:06:56 +0100 Subject: [PATCH 1/7] fix: fix endPoint --- .../src/main/java/ma/insea/connect/user/UserController.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/packages/insea-connect-backend/src/main/java/ma/insea/connect/user/UserController.java b/packages/insea-connect-backend/src/main/java/ma/insea/connect/user/UserController.java index 61589f8..bfd8d41 100644 --- a/packages/insea-connect-backend/src/main/java/ma/insea/connect/user/UserController.java +++ b/packages/insea-connect-backend/src/main/java/ma/insea/connect/user/UserController.java @@ -116,7 +116,7 @@ public ResponseEntity> getUserConversations() { return ResponseEntity.ok(conversations); } - @PostMapping("/user/me/conversations") + @PostMapping("/users/me/conversations") public ResponseEntity createConversation(@RequestBody Map recipientId) { return ResponseEntity.ok(conversationService.createConversation(recipientId.get("recipientId"))); From 3545c0247ee4933d9d0bf87f239535befadf50ae Mon Sep 17 00:00:00 2001 From: AmimiHamza Date: Thu, 23 May 2024 04:06:19 +0100 Subject: [PATCH 2/7] fix:add constructors --- .../insea/connect/chat/common/chatMessage/ChatMessageDTO.java | 4 ++++ .../src/main/java/ma/insea/connect/chat/group/GroupDTO2.java | 4 ++++ 2 files changed, 8 insertions(+) diff --git a/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/common/chatMessage/ChatMessageDTO.java b/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/common/chatMessage/ChatMessageDTO.java index da5efc7..e2f5a77 100644 --- a/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/common/chatMessage/ChatMessageDTO.java +++ b/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/common/chatMessage/ChatMessageDTO.java @@ -2,8 +2,12 @@ import java.util.Date; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; @Data +@AllArgsConstructor +@NoArgsConstructor public class ChatMessageDTO { private Long senderId; private Long recipientId; diff --git a/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/group/GroupDTO2.java b/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/group/GroupDTO2.java index 12268d2..9b139fc 100644 --- a/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/group/GroupDTO2.java +++ b/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/group/GroupDTO2.java @@ -1,9 +1,13 @@ package ma.insea.connect.chat.group; +import lombok.AllArgsConstructor; import lombok.Data; +import lombok.NoArgsConstructor; import ma.insea.connect.chat.common.chatMessage.GroupMessageDTO; @Data +@AllArgsConstructor +@NoArgsConstructor public class GroupDTO2 { private Long id; private String name; From d2b468d421c751212b42acb6550e701516d9ad99 Mon Sep 17 00:00:00 2001 From: AmimiHamza Date: Thu, 23 May 2024 04:07:07 +0100 Subject: [PATCH 3/7] fix: fix name of ConversationController --- .../{ConversatonController.java => ConversationController.java} | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) rename packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/conversation/{ConversatonController.java => ConversationController.java} (97%) diff --git a/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/conversation/ConversatonController.java b/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/conversation/ConversationController.java similarity index 97% rename from packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/conversation/ConversatonController.java rename to packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/conversation/ConversationController.java index c9f94e3..10af490 100644 --- a/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/conversation/ConversatonController.java +++ b/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/conversation/ConversationController.java @@ -14,7 +14,7 @@ @RestController @RequiredArgsConstructor @RequestMapping("/api/v1") -public class ConversatonController { +public class ConversationController { private final ConversationService conversationService; @GetMapping("/conversations/{conversationId}/messages") From 4f8ec0eda670211ee61b88bea102ec99c3e5ad45 Mon Sep 17 00:00:00 2001 From: AmimiHamza Date: Thu, 23 May 2024 04:07:39 +0100 Subject: [PATCH 4/7] feat : add more data with different timestamps --- .../java/ma/insea/connect/utils/DummyUserLoader.java | 11 +++++++++-- 1 file changed, 9 insertions(+), 2 deletions(-) diff --git a/packages/insea-connect-backend/src/main/java/ma/insea/connect/utils/DummyUserLoader.java b/packages/insea-connect-backend/src/main/java/ma/insea/connect/utils/DummyUserLoader.java index a2ebb10..715bfc3 100644 --- a/packages/insea-connect-backend/src/main/java/ma/insea/connect/utils/DummyUserLoader.java +++ b/packages/insea-connect-backend/src/main/java/ma/insea/connect/utils/DummyUserLoader.java @@ -228,7 +228,7 @@ private void loadDummyUsers(UserRepository userRepository,GroupRepository groupR GroupMessage groupMessage3=new GroupMessage(); groupMessage3.setGroupId(group.getId()); groupMessage3.setContent("this is a nce group"); - groupMessage3.setTimestamp(new java.sql.Date(System.currentTimeMillis())); + groupMessage3.setTimestamp(new java.sql.Date(System.currentTimeMillis()-1000000)); groupMessage3.setSender(anas); groupMessageRepository.save(groupMessage3); @@ -264,7 +264,7 @@ private void loadDummyUsers(UserRepository userRepository,GroupRepository groupR chatMessage3.setSender(anas); chatMessage3.setRecipient(soulayman); chatMessage3.setContent("nice to meet you too soulayman"); - chatMessage3.setTimestamp(new java.sql.Date(System.currentTimeMillis())); + chatMessage3.setTimestamp(new java.sql.Date(System.currentTimeMillis()+1000000)); chatMessageRepository.save(chatMessage3); @@ -300,6 +300,13 @@ private void loadDummyUsers(UserRepository userRepository,GroupRepository groupR chatMessage33.setContent("nice to meet you too ahmed"); chatMessage33.setTimestamp(new java.sql.Date(System.currentTimeMillis())); chatMessageRepository.save(chatMessage33); + + var chatId4 = getChatRoomId(Long.toString(anas.getId()),Long.toString(saad.getId()), true); + Conversation conversation4 = new Conversation(); + conversation4.setChatId(chatId4); + conversation4.setMember1(anas); + conversation4.setMember2(saad); + conversationRepository.save(conversation4); } public String getChatRoomId(String senderId,String recipientId,boolean createNewRoomIfNotExists) From d3be9ebb556be6f8c24cc089d5132f79dcfbcb2c Mon Sep 17 00:00:00 2001 From: AmimiHamza Date: Thu, 23 May 2024 04:08:29 +0100 Subject: [PATCH 5/7] feat: sort groups by the last message --- .../java/ma/insea/connect/chat/group/GroupService.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/group/GroupService.java b/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/group/GroupService.java index f483184..e809c41 100644 --- a/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/group/GroupService.java +++ b/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/group/GroupService.java @@ -3,6 +3,9 @@ import lombok.RequiredArgsConstructor; import java.util.ArrayList; +import java.util.Collections; +import java.util.Comparator; +import java.util.Date; import java.util.List; import org.springframework.stereotype.Service; @@ -70,6 +73,11 @@ public List findallgroupsofemail() { groupDTO.setLastMessage(chatMessage); groupDTOs.add(groupDTO); } + Collections.reverse(groupDTOs); + groupDTOs.sort(Comparator.comparing( + groupDTO2 -> ((GroupDTO2) groupDTO2).getLastMessage() != null ? ((GroupDTO2) groupDTO2).getLastMessage().getTimestamp() : new Date(0)).reversed()); + + return groupDTOs; } public String deleteGroup(Long groupId) { From 2a2c80dc91069adcd48ceeb1759d4a3a4ad77f1f Mon Sep 17 00:00:00 2001 From: AmimiHamza Date: Thu, 23 May 2024 04:08:42 +0100 Subject: [PATCH 6/7] feat: sort conversations by the last message --- .../connect/chat/conversation/ConversationService.java | 6 ++++++ 1 file changed, 6 insertions(+) diff --git a/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/conversation/ConversationService.java b/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/conversation/ConversationService.java index 10c8215..fb990c6 100644 --- a/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/conversation/ConversationService.java +++ b/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/conversation/ConversationService.java @@ -1,7 +1,10 @@ package ma.insea.connect.chat.conversation; import java.util.ArrayList; +import java.util.Comparator; +import java.util.Date; import java.util.List; +import java.util.Collections; import org.springframework.stereotype.Service; @@ -60,6 +63,9 @@ public List findConversationsByEmail() { conversationDTOs.add(conversationDTO); } + Collections.reverse(conversationDTOs); + conversationDTOs.sort(Comparator.comparing( + conversationDTO -> ((ConversationDTO) conversationDTO).getLastMessage() != null ? ((ConversationDTO) conversationDTO).getLastMessage().getTimestamp() : new Date(0)).reversed()); return conversationDTOs; From 7347f39526bb5936d69600ef93ded43afc46c2ce Mon Sep 17 00:00:00 2001 From: AmimiHamza Date: Thu, 23 May 2024 04:09:54 +0100 Subject: [PATCH 7/7] fix: return a 409 when the user try to create a conversation that already exists --- .../ma/insea/connect/user/UserController.java | 20 ++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/packages/insea-connect-backend/src/main/java/ma/insea/connect/user/UserController.java b/packages/insea-connect-backend/src/main/java/ma/insea/connect/user/UserController.java index bfd8d41..09d81bf 100644 --- a/packages/insea-connect-backend/src/main/java/ma/insea/connect/user/UserController.java +++ b/packages/insea-connect-backend/src/main/java/ma/insea/connect/user/UserController.java @@ -1,8 +1,10 @@ package ma.insea.connect.user; import lombok.RequiredArgsConstructor; +import ma.insea.connect.chat.common.chatMessage.ChatMessageService; import ma.insea.connect.chat.conversation.Conversation; import ma.insea.connect.chat.conversation.ConversationDTO; +import ma.insea.connect.chat.conversation.ConversationRepository; import ma.insea.connect.chat.conversation.ConversationService; import ma.insea.connect.chat.group.GroupDTO2; import ma.insea.connect.chat.group.GroupService; @@ -11,6 +13,8 @@ import ma.insea.connect.keycloak.service.KeyCloakService; import ma.insea.connect.user.DTO.AddUserDTO; import ma.insea.connect.user.DTO.UserInfoResponseDTO; +import ma.insea.connect.utils.Functions; + import org.springframework.http.HttpStatus; import org.springframework.http.ResponseEntity; import org.springframework.messaging.handler.annotation.MessageMapping; @@ -36,6 +40,9 @@ public class UserController { private final UserRepository userRepository; private final ConversationService conversationService; private final KeyCloakController keyCloakController; + private final Functions functions; + private final ChatMessageService chatMessageService; + private final ConversationRepository conversationRepository; @MessageMapping("/users.addUser") @SendTo("/user/public") @@ -112,13 +119,20 @@ public ResponseEntity getUserById(@AuthenticationPrincipal @GetMapping("/users/me/conversations") public ResponseEntity> getUserConversations() { - List conversations = conversationService.findConversationsByEmail(); - return ResponseEntity.ok(conversations); + return ResponseEntity.ok(conversationService.findConversationsByEmail()); } @PostMapping("/users/me/conversations") public ResponseEntity createConversation(@RequestBody Map recipientId) { - return ResponseEntity.ok(conversationService.createConversation(recipientId.get("recipientId"))); + User connectedUser = functions.getConnectedUser(); + String chatId=chatMessageService.getChatRoomId(Long.toString(connectedUser.getId()),Long.toString(recipientId.get("recipientId")),true); + if(conversationRepository.existsById(chatId)) + {return ResponseEntity.status(HttpStatus.CONFLICT).build(); + } + else{ + conversationService.createConversation(recipientId.get("recipientId")); + return ResponseEntity.created(null).build(); + } } }