22
33import com .mercure .dto .*;
44import com .mercure .entity .MessageEntity ;
5- import com .mercure .entity .UserEntity ;
6- import com .mercure .service .GroupService ;
7- import com .mercure .service .GroupUserJoinService ;
8- import com .mercure .service .MessageService ;
9- import com .mercure .service .UserService ;
5+ import com .mercure .entity .MessageUserEntity ;
6+ import com .mercure .service .*;
107import com .mercure .utils .*;
118import org .json .simple .JSONObject ;
129import org .json .simple .parser .JSONParser ;
@@ -52,6 +49,9 @@ public class WsController {
5249 @ Autowired
5350 private GroupUserJoinService groupUserJoinService ;
5451
52+ @ Autowired
53+ private UserSeenMessageService seenMessageService ;
54+
5555 @ GetMapping
5656 public String testRoute (HttpServletRequest request ) {
5757 String requestTokenHeader = request .getHeader ("authorization" );
@@ -63,7 +63,7 @@ public String testRoute(HttpServletRequest request) {
6363
6464 @ MessageMapping ("/message" )
6565 public void mainChannel (InputTransportDTO dto , @ Header ("simpSessionId" ) String sessionId ) {
66- Map <Integer , String > sessions = userService .getMyMap ();
66+ Map <Integer , String > sessions = userService .getWsSessions ();
6767 TransportActionEnum action = dto .getAction ();
6868 switch (action ) {
6969 case INIT_USER_DATA :
@@ -82,22 +82,26 @@ public void mainChannel(InputTransportDTO dto, @Header("simpSessionId") String s
8282 if (dto .getGroupUrl ().equals ("" ) || groupUserJoinService .checkIfUserIsAuthorizedInGroup (dto .getUserId (), groupId )) {
8383 break ;
8484 }
85- List < MessageDTO > messages = this .getConversationMessage (dto .getGroupUrl ());
85+ WrapperMessageDTO messages = this .getConversationMessage (dto .getGroupUrl (), dto . getMessageId ());
8686 OutputTransportDTO resMessages = new OutputTransportDTO ();
87- resMessages .setAction (TransportActionEnum .FETCH_GROUP_MESSAGES );
87+ if (dto .getMessageId () == -1 ) {
88+ resMessages .setAction (TransportActionEnum .FETCH_GROUP_MESSAGES );
89+ } else {
90+ resMessages .setAction (TransportActionEnum .ADD_CHAT_HISTORY );
91+ }
8892 resMessages .setObject (messages );
8993 this .messagingTemplate .convertAndSend ("/topic/user/" + dto .getUserId (), resMessages );
9094 }
9195 break ;
92- // case GRANT_USER_ADMIN :
93- // String grantResponse = doUserAction( dto.getWsToken(), dto.getUserId(), dto. getGroupUrl(), dto.getAction());
94- // OutputTransportDTO res = new OutputTransportDTO( );
95- // res.setAction(TransportActionEnum.GRANT_USER_ADMIN );
96- // MessageDTO m = new MessageDTO() ;
97- // m.setSender( );
98- // m.setMessage(grantResponse );
99- // res.setObject(grantResponse);
100- // break;
96+ case MARK_MESSAGE_AS_SEEN :
97+ if (! dto .getGroupUrl (). equals ( "" )) {
98+ int messageId = messageService . findLastMessageIdByGroupId ( groupService . findGroupByUrl ( dto . getGroupUrl ()) );
99+ MessageUserEntity messageUserEntity = seenMessageService . findByMessageId ( messageId , dto . getUserId () );
100+ if ( messageUserEntity == null ) break ;
101+ messageUserEntity . setSeen ( true );
102+ seenMessageService . saveMessageUserEntity ( messageUserEntity );
103+ }
104+ break ;
101105 default :
102106 break ;
103107 }
@@ -138,14 +142,18 @@ public void getAndSaveMessage(int userId, String groupUrl, String message) {
138142 }
139143 MessageEntity messageEntity = new MessageEntity (userId , groupId , MessageTypeEnum .TEXT .toString (), message );
140144 MessageEntity msg = messageService .save (messageEntity );
141- MessageDTO messageDTO = messageService .createNotificationMessageDTO (msg );
142145 List <Integer > toSend = messageService .createNotificationList (userId , groupUrl );
146+
147+ // Save seen message
148+ seenMessageService .saveMessageNotSeen (msg , groupId );
149+
143150 OutputTransportDTO dto = new OutputTransportDTO ();
144151 dto .setAction (TransportActionEnum .NOTIFICATION_MESSAGE );
145- dto .setObject (messageDTO );
146- toSend .forEach (toUserId -> messagingTemplate .convertAndSend ("/topic/user/" + toUserId , dto ));
147- messageService .createMessageDTO (msg .getId (), msg .getType (), msg .getUser_id (), msg .getCreatedAt ().toString (), msg .getGroup_id (), msg .getMessage ());
148-
152+ toSend .forEach (toUserId -> {
153+ MessageDTO messageDTO = messageService .createNotificationMessageDTO (msg , toUserId );
154+ dto .setObject (messageDTO );
155+ messagingTemplate .convertAndSend ("/topic/user/" + toUserId , dto );
156+ });
149157 }
150158
151159 @ MessageMapping ("/message/call/{userId}/group/{groupUrl}" )
@@ -181,44 +189,24 @@ public void wsCreateConversation(String req) throws ParseException {
181189 * @param url The group url to map
182190 * @return List of message
183191 */
184- public List <MessageDTO > getConversationMessage (String url ) {
192+ public WrapperMessageDTO getConversationMessage (String url , int messageId ) {
193+ WrapperMessageDTO wrapper = new WrapperMessageDTO ();
185194 if (url != null ) {
186195 List <MessageDTO > messageDTOS = new ArrayList <>();
187196 int groupId = groupService .findGroupByUrl (url );
188- messageService .findByGroupId (groupId ).forEach (msg -> {
189- messageDTOS .add (messageService .createMessageDTO (msg .getId (), msg .getType (), msg .getUser_id (), msg .getCreatedAt ().toString (), msg .getGroup_id (), msg .getMessage ()));
190- });
191- return messageDTOS ;
197+ List <MessageEntity > newMessages = messageService .findByGroupId (groupId , messageId );
198+ int lastMessageId = newMessages != null && newMessages .size () != 0 ? newMessages .get (0 ).getId () : 0 ;
199+ List <MessageEntity > afterMessages = messageService .findByGroupId (groupId , lastMessageId );
200+ if (newMessages != null ) {
201+ wrapper .setLastMessage (afterMessages != null && afterMessages .size () == 0 );
202+ newMessages .forEach (msg ->
203+ messageDTOS .add (messageService
204+ .createMessageDTO (msg .getId (), msg .getType (), msg .getUser_id (), msg .getCreatedAt ().toString (), msg .getGroup_id (), msg .getMessage ()))
205+ );
206+ }
207+ wrapper .setMessages (messageDTOS );
208+ return wrapper ;
192209 }
193210 return null ;
194211 }
195-
196- // private String doUserAction(String wsToken, Integer userIdToChange, String groupUrl, TransportActionEnum action) {
197- // int groupId = groupService.findGroupByUrl(groupUrl);
198- // int userAdminRequestId = userService.findUserIdWithToken(wsToken);
199- // UserEntity userEntity = userService.findById(userIdToChange);
200- // if (userEntity != null) {
201- // int adminUserId = userEntity.getId();
202- // if (action.equals("removeUser")) {
203- // groupUserJoinService.removeUserFromConversation(userAdminRequestId, groupId);
204- // }
205- // if (userService.checkIfUserIsAdmin(adminUserId, groupId)) {
206- // try {
207- // if (action.equals(TransportActionEnum.GRANT_USER_ADMIN)) {
208- // groupUserJoinService.grantUserAdminInConversation(userIdToChange, groupId);
209- // return userEntity.getFirstName() + " has been granted administrator to " + groupService.getGroupName(groupUrl);
210- // }
211- // if (action.equals("delete")) {
212- // groupUserJoinService.removeUserFromConversation(userIdToChange, groupId);
213- // }
214- // if (action.equals("removeAdmin")) {
215- // groupUserJoinService.removeUserAdminFromConversation(userIdToChange, groupId);
216- // }
217- // } catch (Exception e) {
218- // log.warn("Error during performing {} : {}", action, e.getMessage());
219- // }
220- // }
221- // }
222- // return "";
223- // }
224212}
0 commit comments