From 90c993dfff310cd532e0336ce398e5260d7cf0f7 Mon Sep 17 00:00:00 2001 From: AmimiHamza Date: Mon, 20 May 2024 02:06:32 +0100 Subject: [PATCH] fix : initialize data and refact code structure --- .../keycloak/import/realm.json | 2 +- .../common/chatMessage/ChatMessageDTO.java | 2 +- .../common/chatMessage/ChatMessageDTO2.java | 13 +++++++ .../chatMessage/ChatMessageService.java | 34 +++++++++++++++---- .../common/chatMessage/GroupMessageDTO.java | 5 ++- .../conversation/ConversationService.java | 26 ++++++++++---- .../conversation/ConversatonController.java | 4 ++- .../connect/chat/group/GroupController.java | 3 +- .../insea/connect/chat/group/GroupDTO2.java | 11 ++++++ .../connect/chat/group/GroupService.java | 18 ++++++++-- .../ma/insea/connect/user/UserController.java | 11 ++---- .../ma/insea/connect/user/UserService.java | 2 +- .../insea/connect/utils/DummyUserLoader.java | 22 ++++++++++-- 13 files changed, 120 insertions(+), 33 deletions(-) create mode 100644 packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/common/chatMessage/ChatMessageDTO2.java create mode 100644 packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/group/GroupDTO2.java diff --git a/packages/insea-connect-auth-server/keycloak/import/realm.json b/packages/insea-connect-auth-server/keycloak/import/realm.json index c696544..9307d2e 100644 --- a/packages/insea-connect-auth-server/keycloak/import/realm.json +++ b/packages/insea-connect-auth-server/keycloak/import/realm.json @@ -595,7 +595,7 @@ "enabled": true, "firstName": "anas", "lastName": "El Ardi", - "email": "anas@gmail.com", + "email": "anas@example.com", "credentials": [ { "type": "password", 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 4b231b4..da5efc7 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 @@ -8,6 +8,6 @@ public class ChatMessageDTO { private Long senderId; private Long recipientId; private String content; - private Date timestamp;//to datete + private Date timestamp; } diff --git a/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/common/chatMessage/ChatMessageDTO2.java b/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/common/chatMessage/ChatMessageDTO2.java new file mode 100644 index 0000000..2b39203 --- /dev/null +++ b/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/common/chatMessage/ChatMessageDTO2.java @@ -0,0 +1,13 @@ +package ma.insea.connect.chat.common.chatMessage; + +import java.util.Date; + +import lombok.Data; +@Data +public class ChatMessageDTO2 { + private Long senderId; + private String content; + private Date timestamp; + private String senderName; + +} diff --git a/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/common/chatMessage/ChatMessageService.java b/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/common/chatMessage/ChatMessageService.java index 971f5eb..548dc70 100644 --- a/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/common/chatMessage/ChatMessageService.java +++ b/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/common/chatMessage/ChatMessageService.java @@ -9,7 +9,8 @@ import ma.insea.connect.user.User; import ma.insea.connect.user.UserRepository; -import java.util.Date; +import java.sql.Date; +import java.util.ArrayList; import java.util.List; @Service @@ -31,7 +32,7 @@ public ChatMessage saveusermessage(ChatMessageDTO chatMessage) { chatMessage1.setSender(sender); chatMessage1.setRecipient(recipient); chatMessage1.setContent(chatMessage.getContent()); - chatMessage1.setTimestamp(new Date()); + chatMessage1.setTimestamp(new java.sql.Date(System.currentTimeMillis())); chatMessageRepository.save(chatMessage1); @@ -45,10 +46,9 @@ public ChatMessage saveusermessage(ChatMessageDTO chatMessage) { public GroupMessage savegroupmessage(GroupMessageDTO groupMessageDTO) { User sender = userRepository.findById(groupMessageDTO.getSenderId()).get(); GroupMessage groupMessage = new GroupMessage(); - groupMessage.setGroupId(groupMessageDTO.getGroupId()); groupMessage.setSender(sender); groupMessage.setContent(groupMessageDTO.getContent()); - groupMessage.setTimestamp(new Date()); + groupMessage.setTimestamp(new java.sql.Date(System.currentTimeMillis())); groupMessageRepository.save(groupMessage); return groupMessage; } @@ -89,8 +89,30 @@ public ChatMessageDTO findLastMessage(String chatId) { } return null; } - public List findGroupMessages(Long groupId) { - return groupMessageRepository.findByGroupId(groupId); + public List findGroupMessages(Long groupId) { + List groupMessages = groupMessageRepository.findByGroupId(groupId); + List groupMessages2 = new ArrayList(); + for (GroupMessage groupMessage : groupMessages) { + GroupMessageDTO groupMessageDTO = new GroupMessageDTO(); + groupMessageDTO.setContent(groupMessage.getContent()); + groupMessageDTO.setTimestamp(groupMessage.getTimestamp()); + groupMessageDTO.setSenderId(groupMessage.getSender().getId()); + groupMessageDTO.setSenderName(groupMessage.getSender().getUsername()); + groupMessages2.add(groupMessageDTO); + } + return groupMessages2; } + public GroupMessageDTO findLastGroupMessage(Long groupId) { + List groupMessages = groupMessageRepository.findByGroupId(groupId); + if (groupMessages.size() > 0) { + GroupMessage groupMessage2=groupMessages.get(groupMessages.size() - 1); + GroupMessageDTO groupMessageDTO=new GroupMessageDTO(); + groupMessageDTO.setContent(groupMessage2.getContent()); + groupMessageDTO.setTimestamp(new java.util.Date(System.currentTimeMillis())); + groupMessageDTO.setSenderId(groupMessage2.getSender().getId()); + groupMessageDTO.setSenderName(groupMessage2.getSender().getUsername()); + return groupMessageDTO; + } + return null;} } diff --git a/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/common/chatMessage/GroupMessageDTO.java b/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/common/chatMessage/GroupMessageDTO.java index 220167d..aea6a85 100644 --- a/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/common/chatMessage/GroupMessageDTO.java +++ b/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/common/chatMessage/GroupMessageDTO.java @@ -2,11 +2,14 @@ +import java.util.Date; + import lombok.Data; @Data public class GroupMessageDTO { private Long senderId; - private Long groupId; private String content; + private String senderName; + private Date timestamp; } \ No newline at end of file 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 d6ae0ce..82d4e4c 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 @@ -10,6 +10,7 @@ import ma.insea.connect.user.UserRepository; import ma.insea.connect.chat.common.chatMessage.ChatMessage; import ma.insea.connect.chat.common.chatMessage.ChatMessageDTO; +import ma.insea.connect.chat.common.chatMessage.ChatMessageDTO2; import ma.insea.connect.chat.common.chatMessage.ChatMessageRepository; @@ -26,6 +27,7 @@ public class ConversationService { public List findConversationsByEmail(String email) { User user2=userRepository.findByEmail(email); + System.out.println("useer" + user2); List conversations = conversationRepository.findAllByMember1OrMember2(user2,user2); @@ -34,15 +36,16 @@ public List findConversationsByEmail(String email) { { ChatMessageDTO chatMessage=chatMessageService.findLastMessage(conversation.getChatId()); - Long member1=conversation.getMember1().getId(); - Long member2=conversation.getMember2().getId(); - Long recepientId=member1.equals(email)?member2:member1; - User user=userRepository.findById(recepientId).get(); + String member1=conversation.getMember1().getEmail(); + String member2=conversation.getMember2().getEmail(); + String recepientId=member1.equals(email)?member2:member1; + User user=userRepository.findByEmail(recepientId); + + ConversationDTO conversationDTO=new ConversationDTO(); conversationDTO.setChatId(conversation.getChatId()); - conversationDTO.setRecipientId(recepientId); conversationDTO.setUsername(user.getUsername()); conversationDTO.setLastLogin(user.getLastLogin()); conversationDTO.setStatus(user.getStatus()); @@ -88,8 +91,17 @@ public List findConversationsByID(Long myId) { } - public List findConversationMessages(String conversationId) { - return chatMessageRepository.findByChatId(conversationId); + public List findConversationMessages(String conversationId) { + List chatMessages = chatMessageRepository.findByChatId(conversationId); + List chatMessageDTOs = new ArrayList<>(); + for (ChatMessage chatMessage : chatMessages) { + ChatMessageDTO2 chatMessageDTO = new ChatMessageDTO2(); + chatMessageDTO.setContent(chatMessage.getContent()); + chatMessageDTO.setTimestamp(chatMessage.getTimestamp()); + chatMessageDTO.setSenderId(chatMessage.getSender().getId()); + chatMessageDTO.setSenderName(chatMessage.getSender().getUsername()); + chatMessageDTOs.add(chatMessageDTO); } + return chatMessageDTOs;} } 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/ConversatonController.java index 3a1667b..bddd25c 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/ConversatonController.java @@ -9,6 +9,8 @@ import org.springframework.web.bind.annotation.RestController; import ma.insea.connect.chat.common.chatMessage.ChatMessage; +import ma.insea.connect.chat.common.chatMessage.ChatMessageDTO; +import ma.insea.connect.chat.common.chatMessage.ChatMessageDTO2; import lombok.RequiredArgsConstructor; @RestController @@ -18,7 +20,7 @@ public class ConversatonController { private final ConversationService conversationService; @GetMapping("/conversations/{conversationId}/messages") - public ResponseEntity> findConversationMessages(@PathVariable String conversationId + public ResponseEntity> findConversationMessages(@PathVariable String conversationId ) { return ResponseEntity .ok(conversationService.findConversationMessages(conversationId)); diff --git a/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/group/GroupController.java b/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/group/GroupController.java index e9d206f..e1644cd 100644 --- a/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/group/GroupController.java +++ b/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/group/GroupController.java @@ -3,6 +3,7 @@ import lombok.AllArgsConstructor; import ma.insea.connect.chat.common.chatMessage.ChatMessageService; import ma.insea.connect.chat.common.chatMessage.GroupMessage; +import ma.insea.connect.chat.common.chatMessage.GroupMessageDTO; import ma.insea.connect.user.User; import java.util.List; @@ -40,7 +41,7 @@ public ResponseEntity deleteGroup(@PathVariable("groupid") Long groupId) } @GetMapping("/groups/{groupId}/messages") - public ResponseEntity> findGroupChatMessages(@PathVariable Long groupId) { + public ResponseEntity> findGroupChatMessages(@PathVariable Long groupId) { return ResponseEntity .ok(chatMessageService.findGroupMessages(groupId)); 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 new file mode 100644 index 0000000..12268d2 --- /dev/null +++ b/packages/insea-connect-backend/src/main/java/ma/insea/connect/chat/group/GroupDTO2.java @@ -0,0 +1,11 @@ +package ma.insea.connect.chat.group; + + +import lombok.Data; +import ma.insea.connect.chat.common.chatMessage.GroupMessageDTO; +@Data +public class GroupDTO2 { + private Long id; + private String name; + private GroupMessageDTO lastMessage; +} 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 a447a86..007aed1 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 @@ -10,6 +10,10 @@ import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import ma.insea.connect.chat.common.chatMessage.ChatMessageDTO; +import ma.insea.connect.chat.common.chatMessage.ChatMessageDTO2; +import ma.insea.connect.chat.common.chatMessage.ChatMessageService; +import ma.insea.connect.chat.common.chatMessage.GroupMessageDTO; import ma.insea.connect.user.User; import ma.insea.connect.user.UserRepository; @@ -20,6 +24,7 @@ public class GroupService { private final UserRepository userRepository; private final GroupRepository groupRepository; private final MembershipRepository membershipRepository; + private final ChatMessageService chatMessageService; public Group saveGroup(GroupDTO groupDTO) { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); @@ -49,13 +54,22 @@ public Group saveGroup(GroupDTO groupDTO) { membershipRepository.save(m); return group; } - public List findallgroupsofemail(Long myId) { + public List findallgroupsofemail(Long myId) { List memberships = membershipRepository.findByUserId(myId); List groups = new ArrayList(); for (Membership membership : memberships) { groups.add(membership.getGroup()); } - return groups; + List groupDTOs = new ArrayList(); + for (Group group : groups) { + GroupDTO2 groupDTO = new GroupDTO2(); + groupDTO.setId(group.getId()); + groupDTO.setName(group.getName()); + GroupMessageDTO chatMessage=chatMessageService.findLastGroupMessage(group.getId()); + groupDTO.setLastMessage(chatMessage); + groupDTOs.add(groupDTO); + } + return groupDTOs; } public void deleteGroup(Long groupId) { Authentication authentication = SecurityContextHolder.getContext().getAuthentication(); 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 e042c5d..62e0da6 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 @@ -4,6 +4,7 @@ import ma.insea.connect.chat.conversation.ConversationDTO; import ma.insea.connect.chat.conversation.ConversationService; import ma.insea.connect.chat.group.Group; +import ma.insea.connect.chat.group.GroupDTO2; import ma.insea.connect.chat.group.GroupService; import ma.insea.connect.keycloak.DTO.AddKeycloakDTO; import ma.insea.connect.keycloak.controller.KeyCloakController; @@ -92,11 +93,6 @@ public ResponseEntity> findConnectedUsers() { return ResponseEntity.ok(userService.findAllUsers()); } - @GetMapping("/user/{myId}/groups") - public ResponseEntity> getGroupsByEmail(@PathVariable Long myId) { - List groups = groupService.findallgroupsofemail(myId); - return ResponseEntity.ok(groups); - } @GetMapping("/user/{email}") public ResponseEntity getUserByEmail(@PathVariable String email) { @@ -105,7 +101,7 @@ public ResponseEntity getUserByEmail(@PathVariable String email) { } @GetMapping("/users/me/groups") - public ResponseEntity> getGroupsByEmail(@AuthenticationPrincipal Jwt jwt) { + public ResponseEntity> getGroupsByEmail(@AuthenticationPrincipal Jwt jwt) { if (jwt == null) { return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); } @@ -135,9 +131,6 @@ public ResponseEntity getUserById(@AuthenticationPrincipal @GetMapping("/users/me/conversations") public ResponseEntity> getUserConversations(@AuthenticationPrincipal Jwt jwt) { - if (jwt == null) { - return ResponseEntity.status(HttpStatus.FORBIDDEN).build(); - } String email = jwt.getClaimAsString("email"); List conversations = conversationService.findConversationsByEmail(email); return ResponseEntity.ok(conversations); diff --git a/packages/insea-connect-backend/src/main/java/ma/insea/connect/user/UserService.java b/packages/insea-connect-backend/src/main/java/ma/insea/connect/user/UserService.java index bba46c1..22f2ba7 100644 --- a/packages/insea-connect-backend/src/main/java/ma/insea/connect/user/UserService.java +++ b/packages/insea-connect-backend/src/main/java/ma/insea/connect/user/UserService.java @@ -23,7 +23,7 @@ public void disconnect(User user) { var storedUser = userRepository.findByEmail(user.getEmail()); if (storedUser != null) { storedUser.setStatus(Status.OFFLINE); - storedUser.setLastLogin(new java.util.Date()); + storedUser.setLastLogin(new java.sql.Date(System.currentTimeMillis())); userRepository.save(storedUser); } } 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 2eba7bf..8c1cf60 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 @@ -53,7 +53,7 @@ public void run(String... args) throws Exception { private void loadDummyUsers(UserRepository userRepository,GroupRepository groupRepository, MembershipRepository membershipRepository,GroupMessageRepository groupMessageRepository , ChatMessageRepository chatMessageRepository,ConversationRepository conversationRepository) { AddUserDTO user = AddUserDTO.builder() .username("anas") - .email("anas") + .email("anas@example.com") .firstName("anas") .lastName("anas") .role(Role.ADMIN) @@ -133,6 +133,13 @@ private void loadDummyUsers(UserRepository userRepository,GroupRepository groupR groupMessage2.setSender(soulayman); groupMessageRepository.save(groupMessage2); + GroupMessage groupMessage3=new GroupMessage(); + groupMessage3.setGroupId(group.getId()); + groupMessage3.setContent("this is a nce group"); + groupMessage3.setTimestamp(new java.sql.Date(System.currentTimeMillis())); + groupMessage3.setSender(anas); + groupMessageRepository.save(groupMessage3); + @@ -142,7 +149,7 @@ private void loadDummyUsers(UserRepository userRepository,GroupRepository groupR chatMessage1.setSender(anas); chatMessage1.setRecipient(soulayman); chatMessage1.setContent("hello soulayman , my name is anas"); - chatMessage1.setTimestamp(new Date()); + chatMessage1.setTimestamp(new java.sql.Date(System.currentTimeMillis())); chatMessageRepository.save(chatMessage1); Conversation conversation = new Conversation(); @@ -157,8 +164,17 @@ private void loadDummyUsers(UserRepository userRepository,GroupRepository groupR chatMessage2.setSender(soulayman); chatMessage2.setRecipient(anas); chatMessage2.setContent("nice to meet you anas , my name is soulayman"); - chatMessage2.setTimestamp(new Date()); + chatMessage2.setTimestamp(new java.sql.Date(System.currentTimeMillis())); chatMessageRepository.save(chatMessage2); + + + ChatMessage chatMessage3 = new ChatMessage(); + chatMessage3.setChatId(chatId); + chatMessage3.setSender(anas); + chatMessage3.setRecipient(soulayman); + chatMessage3.setContent("nice to meet you too soulayman"); + chatMessage3.setTimestamp(new java.sql.Date(System.currentTimeMillis())); + chatMessageRepository.save(chatMessage3); } public String getChatRoomId(String senderId,String recipientId,boolean createNewRoomIfNotExists)