Skip to content

Commit 82a339b

Browse files
committed
work
1 parent 76d20ae commit 82a339b

File tree

7 files changed

+203
-64
lines changed

7 files changed

+203
-64
lines changed

src/main/java/org/woehlke/java/simpleworklist/domain/db/user/UserAccountChatMessage.java

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,8 +31,7 @@
3131
name = "queryFindAllMessagesBetweenCurrentAndOtherUser",
3232
query = "select m from org.woehlke.java.simpleworklist.domain.db.user.UserAccountChatMessage m " +
3333
"where (m.sender = :thisUser and m.receiver = :otherUser) " +
34-
"or (m.sender = :otherUser and m.receiver = :thisUser)",
35-
lockMode = LockModeType.READ
34+
"or (m.sender = :otherUser and m.receiver = :thisUser) order by m.rowCreatedAt desc"
3635
)
3736
})
3837
@Getter

src/main/java/org/woehlke/java/simpleworklist/domain/db/user/chat/ChatMessageRepository.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -24,6 +24,12 @@ Page<UserAccountChatMessage> findAllMessagesBetweenCurrentAndOtherUser(
2424
Pageable request
2525
);
2626

27+
@Query(name="queryFindAllMessagesBetweenCurrentAndOtherUser")
28+
List<UserAccountChatMessage> findAllMessagesBetweenCurrentAndOtherUser(
29+
@Param("thisUser") UserAccount thisUser,
30+
@Param("otherUser") UserAccount otherUser
31+
);
32+
2733
List<UserAccountChatMessage> findByReceiverAndReadByReceiver(
2834
UserAccount receiver,
2935
boolean readByReceiver

src/main/java/org/woehlke/java/simpleworklist/domain/db/user/chat/ChatMessageService.java

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -5,21 +5,25 @@
55
import org.woehlke.java.simpleworklist.domain.db.user.UserAccount;
66
import org.woehlke.java.simpleworklist.domain.db.user.UserAccountChatMessage;
77

8+
import javax.validation.constraints.NotNull;
9+
import java.util.List;
10+
811
/**
912
* Created by tw on 16.02.2016.
1013
*/
1114
public interface ChatMessageService {
1215

13-
UserAccountChatMessage sendNewUserMessage(
14-
UserAccount thisUser,
15-
UserAccount otherUser,
16-
ChatMessageForm chatMessageForm
17-
);
16+
int getNumberOfNewIncomingMessagesForUser(UserAccount user);
17+
18+
Page<UserAccountChatMessage> findAllMessagesBetweenCurrentAndOtherUser(
19+
UserAccount sender,
20+
UserAccount receiver,
21+
Pageable request
22+
);
1823

19-
int getNumberOfNewIncomingMessagesForUser(UserAccount user);
24+
void saveAll(List<UserAccountChatMessage> user2UserMessageList);
2025

21-
Page<UserAccountChatMessage> readAllMessagesBetweenCurrentAndOtherUser(
22-
UserAccount receiver, UserAccount sender, Pageable request
23-
);
26+
UserAccountChatMessage saveAndFlush(UserAccountChatMessage m);
2427

28+
List<UserAccountChatMessage> findByReceiverAndReadByReceiver(UserAccount receiver, boolean readByReceiver);
2529
}

src/main/java/org/woehlke/java/simpleworklist/domain/db/user/chat/ChatMessageServiceImpl.java

Lines changed: 39 additions & 45 deletions
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,8 @@
1111

1212
import org.springframework.beans.factory.annotation.Autowired;
1313

14+
import javax.validation.constraints.NotNull;
15+
import java.util.ArrayList;
1416
import java.util.List;
1517
import java.util.UUID;
1618

@@ -19,7 +21,6 @@
1921
*/
2022
@Slf4j
2123
@Service
22-
@Transactional(propagation = Propagation.REQUIRED, readOnly = true)
2324
public class ChatMessageServiceImpl implements ChatMessageService {
2425

2526
private final ChatMessageRepository userMessageRepository;
@@ -29,50 +30,43 @@ public ChatMessageServiceImpl(ChatMessageRepository userMessageRepository) {
2930
this.userMessageRepository = userMessageRepository;
3031
}
3132

32-
@Override
33-
@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false)
34-
public UserAccountChatMessage sendNewUserMessage(
35-
UserAccount thisUser,
36-
UserAccount otherUser,
37-
ChatMessageForm chatMessageForm
38-
) {
39-
log.info("sendNewUserMessage");
40-
UserAccountChatMessage m = new UserAccountChatMessage();
41-
m.setSender(thisUser);
42-
m.setReceiver(otherUser);
43-
m.setReadByReceiver(false);
44-
m.setUuid(UUID.randomUUID());
45-
m.setMessageText(chatMessageForm.getMessageText());
46-
return userMessageRepository.saveAndFlush(m);
47-
}
33+
@Override
34+
@Transactional(propagation = Propagation.REQUIRED, readOnly = true)
35+
public int getNumberOfNewIncomingMessagesForUser(
36+
UserAccount receiver
37+
) {
38+
log.info("getNumberOfNewIncomingMessagesForUser");
39+
boolean readByReceiver = false;
40+
//TODO: #246 change List<Project> to Page<Project>
41+
List<UserAccountChatMessage> userAccountChatMessageList =
42+
userMessageRepository.findByReceiverAndReadByReceiver(receiver, readByReceiver);
43+
return userAccountChatMessageList.size();
44+
}
4845

49-
@Override
50-
public int getNumberOfNewIncomingMessagesForUser(
51-
UserAccount receiver
52-
) {
53-
log.info("getNumberOfNewIncomingMessagesForUser");
54-
boolean readByReceiver = false;
55-
//TODO: #246 change List<Project> to Page<Project>
56-
List<UserAccountChatMessage> userAccountChatMessageList =
57-
userMessageRepository.findByReceiverAndReadByReceiver(receiver, readByReceiver);
58-
return userAccountChatMessageList.size();
59-
}
46+
@Override
47+
@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false)
48+
public Page<UserAccountChatMessage> findAllMessagesBetweenCurrentAndOtherUser(
49+
UserAccount sender, UserAccount receiver, Pageable request
50+
) {
51+
return userMessageRepository.findAllMessagesBetweenCurrentAndOtherUser(sender, receiver, request);
52+
}
53+
54+
@Override
55+
@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false)
56+
public void saveAll(List<UserAccountChatMessage> user2UserMessageList) {
57+
userMessageRepository.saveAll(user2UserMessageList);
58+
}
59+
60+
@Override
61+
@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false)
62+
public UserAccountChatMessage saveAndFlush(UserAccountChatMessage m) {
63+
return userMessageRepository.saveAndFlush(m);
64+
}
65+
66+
@Override
67+
@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false)
68+
public List<UserAccountChatMessage> findByReceiverAndReadByReceiver(UserAccount receiver, boolean readByReceiver) {
69+
return userMessageRepository.findByReceiverAndReadByReceiver(receiver, readByReceiver);
70+
}
6071

61-
@Override
62-
@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false)
63-
public Page<UserAccountChatMessage> readAllMessagesBetweenCurrentAndOtherUser(
64-
UserAccount receiver,
65-
UserAccount sender,
66-
Pageable request
67-
) {
68-
log.info("readAllMessagesBetweenCurrentAndOtherUser");
69-
Page<UserAccountChatMessage> user2UserMessagePage = userMessageRepository.findAllMessagesBetweenCurrentAndOtherUser(sender,receiver,request);
70-
for(UserAccountChatMessage userAccountChatMessage : user2UserMessagePage){
71-
if((!userAccountChatMessage.getReadByReceiver()) && (receiver.getId().longValue()== userAccountChatMessage.getReceiver().getId().longValue())){
72-
userAccountChatMessage.setReadByReceiver(true);
73-
userMessageRepository.saveAndFlush(userAccountChatMessage);
74-
}
75-
}
76-
return userMessageRepository.findAllMessagesBetweenCurrentAndOtherUser(sender,receiver,request);
77-
}
7872
}

src/main/java/org/woehlke/java/simpleworklist/domain/db/UserChatMessageController.java renamed to src/main/java/org/woehlke/java/simpleworklist/domain/meso/UserChatMessageController.java

Lines changed: 40 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
1-
package org.woehlke.java.simpleworklist.domain.db;
1+
package org.woehlke.java.simpleworklist.domain.meso;
22

33
import lombok.extern.slf4j.Slf4j;
4+
import org.springframework.beans.factory.annotation.Autowired;
45
import org.springframework.data.domain.Page;
56
import org.springframework.data.domain.Pageable;
67
import org.springframework.data.domain.Sort;
@@ -19,9 +20,11 @@
1920
import org.woehlke.java.simpleworklist.domain.db.user.chat.ChatMessageForm;
2021
import org.woehlke.java.simpleworklist.domain.db.data.Context;
2122
import org.woehlke.java.simpleworklist.domain.db.user.UserAccount;
23+
import org.woehlke.java.simpleworklist.domain.meso.chat.UserChatMessageControllerService;
2224
import org.woehlke.java.simpleworklist.domain.meso.session.UserSessionBean;
2325

2426
import javax.validation.Valid;
27+
import javax.validation.constraints.NotNull;
2528
import java.util.Locale;
2629

2730
/**
@@ -33,27 +36,56 @@
3336
@RequestMapping(path = "/user2user")
3437
public class UserChatMessageController extends AbstractController {
3538

36-
@RequestMapping(path = "/{userId}/messages/", method = RequestMethod.GET)
39+
40+
private final UserChatMessageControllerService userChatMessageControllerService;
41+
42+
@Autowired
43+
public UserChatMessageController(UserChatMessageControllerService userChatMessageControllerService) {
44+
this.userChatMessageControllerService = userChatMessageControllerService;
45+
}
46+
47+
@RequestMapping(path = "/{userId}/messages/", method = RequestMethod.GET)
3748
public final String getLastMessagesBetweenCurrentAndOtherUser(
38-
@PathVariable("userId") UserAccount otherUser,
49+
@Valid @NotNull @PathVariable("userId") UserAccount otherUser,
3950
@PageableDefault(sort = "rowCreatedAt", direction = Sort.Direction.DESC) Pageable request,
4051
@ModelAttribute("userSession") UserSessionBean userSession,
4152
Locale locale,
4253
Model model
4354
) {
4455
log.info("getLastMessagesBetweenCurrentAndOtherUser");
56+
log.info("-----------------------------------------------------------------------------------------------");
57+
log.info("Context context");
4558
Context context = super.getContext(userSession);
59+
log.info(context.toString());
60+
log.info("-----------------------------------------------------------------------------------------------");
61+
log.info("UserAccount thisUser");
4662
UserAccount thisUser = context.getUserAccount();
47-
model.addAttribute("userSession",userSession);
63+
log.info(thisUser.toString());
64+
log.info("-----------------------------------------------------------------------------------------------");
65+
log.info("ChatMessageForm chatMessageForm");
4866
ChatMessageForm chatMessageForm = new ChatMessageForm();
49-
Page<UserAccountChatMessage> user2UserMessagePage = chatMessageService.readAllMessagesBetweenCurrentAndOtherUser(thisUser,otherUser,request);
67+
log.info(chatMessageForm.toString());
68+
log.info("-----------------------------------------------------------------------------------------------");
69+
log.info("Page<UserAccountChatMessage> user2UserMessagePage");
70+
Page<UserAccountChatMessage> user2UserMessagePage = userChatMessageControllerService.readAllMessagesBetweenCurrentAndOtherUser(
71+
thisUser,otherUser,request
72+
);
73+
for(UserAccountChatMessage o:user2UserMessagePage){
74+
log.info(o.toString());
75+
}
76+
log.info("-----------------------------------------------------------------------------------------------");
77+
log.info("breadcrumb");
78+
Breadcrumb breadcrumb = breadcrumbService.getBreadcrumbForMessagesBetweenCurrentAndOtherUser(locale,userSession);
79+
log.info("-----------------------------------------------------------------------------------------------");
80+
log.info("model.addAttributes");
5081
model.addAttribute("newUser2UserMessage", chatMessageForm);
5182
model.addAttribute("otherUser", otherUser);
5283
model.addAttribute("user2UserMessagePage", user2UserMessagePage);
5384
model.addAttribute("refreshMessages",true);
54-
Breadcrumb breadcrumb = breadcrumbService.getBreadcrumbForMessagesBetweenCurrentAndOtherUser(locale,userSession);
5585
model.addAttribute("breadcrumb",breadcrumb);
5686
model.addAttribute("userSession", userSession);
87+
log.info("-----------------------------------------------------------------------------------------------");
88+
log.info("getLastMessagesBetweenCurrentAndOtherUser DONE");
5789
return "user/messages/all";
5890
}
5991

@@ -78,13 +110,13 @@ public final String sendNewMessageToOtherUser(
78110
for(ObjectError objectError:result.getAllErrors()){
79111
log.info("result.hasErrors: "+objectError.toString());
80112
}
81-
Page<UserAccountChatMessage> user2UserMessagePage = chatMessageService.readAllMessagesBetweenCurrentAndOtherUser(thisUser,otherUser,request);
113+
Page<UserAccountChatMessage> user2UserMessagePage = userChatMessageControllerService.readAllMessagesBetweenCurrentAndOtherUser(thisUser,otherUser,request);
82114
model.addAttribute("otherUser", otherUser);
83115
model.addAttribute("user2UserMessagePage", user2UserMessagePage);
84116
model.addAttribute("userSession", userSession);
85117
return "user/messages/all";
86118
} else {
87-
chatMessageService.sendNewUserMessage(thisUser, otherUser, chatMessageForm);
119+
userChatMessageControllerService.sendNewUserMessage(thisUser, otherUser, chatMessageForm);
88120
model.addAttribute("userSession", userSession);
89121
return "redirect:/user2user/" + otherUser.getId() + "/messages/";
90122
}
Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
package org.woehlke.java.simpleworklist.domain.meso.chat;
2+
3+
import org.springframework.data.domain.Page;
4+
import org.springframework.data.domain.Pageable;
5+
import org.woehlke.java.simpleworklist.domain.db.user.UserAccount;
6+
import org.woehlke.java.simpleworklist.domain.db.user.UserAccountChatMessage;
7+
import org.woehlke.java.simpleworklist.domain.db.user.chat.ChatMessageForm;
8+
9+
10+
public interface UserChatMessageControllerService {
11+
12+
UserAccountChatMessage sendNewUserMessage(
13+
UserAccount thisUser,
14+
UserAccount otherUser,
15+
ChatMessageForm chatMessageForm
16+
);
17+
18+
Page<UserAccountChatMessage> readAllMessagesBetweenCurrentAndOtherUser(
19+
UserAccount receiver,
20+
UserAccount sender,
21+
Pageable request
22+
);
23+
}
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,81 @@
1+
package org.woehlke.java.simpleworklist.domain.meso.chat;
2+
3+
import lombok.extern.slf4j.Slf4j;
4+
import org.springframework.beans.factory.annotation.Autowired;
5+
import org.springframework.data.domain.Page;
6+
import org.springframework.data.domain.Pageable;
7+
import org.springframework.stereotype.Service;
8+
import org.springframework.transaction.annotation.Propagation;
9+
import org.springframework.transaction.annotation.Transactional;
10+
import org.woehlke.java.simpleworklist.domain.db.user.UserAccount;
11+
import org.woehlke.java.simpleworklist.domain.db.user.UserAccountChatMessage;
12+
import org.woehlke.java.simpleworklist.domain.db.user.chat.ChatMessageForm;
13+
import org.woehlke.java.simpleworklist.domain.db.user.chat.ChatMessageService;
14+
15+
import javax.validation.constraints.NotNull;
16+
import java.util.ArrayList;
17+
import java.util.List;
18+
import java.util.UUID;
19+
20+
@Slf4j
21+
@Service
22+
@Transactional(propagation = Propagation.REQUIRES_NEW, readOnly = false)
23+
public class UserChatMessageControllerServiceImpl implements UserChatMessageControllerService {
24+
25+
private final ChatMessageService chatMessageService;
26+
27+
@Autowired
28+
public UserChatMessageControllerServiceImpl(ChatMessageService chatMessageService) {
29+
this.chatMessageService = chatMessageService;
30+
}
31+
32+
@Override
33+
public UserAccountChatMessage sendNewUserMessage(
34+
UserAccount thisUser,
35+
UserAccount otherUser,
36+
ChatMessageForm chatMessageForm
37+
) {
38+
log.info("sendNewUserMessage");
39+
UserAccountChatMessage m = new UserAccountChatMessage();
40+
m.setSender(thisUser);
41+
m.setReceiver(otherUser);
42+
m.setReadByReceiver(false);
43+
m.setUuid(UUID.randomUUID());
44+
m.setMessageText(chatMessageForm.getMessageText());
45+
return chatMessageService.saveAndFlush(m);
46+
}
47+
48+
@Override
49+
public Page<UserAccountChatMessage> readAllMessagesBetweenCurrentAndOtherUser(
50+
UserAccount receiver,
51+
UserAccount sender,
52+
Pageable request
53+
) {
54+
log.info("readAllMessagesBetweenCurrentAndOtherUser");
55+
log.info("-----------------------------------------------------------------------------------------------");
56+
List<UserAccountChatMessage> user2UserMessageList = new ArrayList<>();
57+
log.info("Page<UserAccountChatMessage> user2UserMessagePage");
58+
log.info(sender.toString());
59+
log.info(receiver.toString());
60+
log.info(request.toString());
61+
log.info("Page<UserAccountChatMessage> user2UserMessagePage");
62+
Page<UserAccountChatMessage> user2UserMessagePage = chatMessageService.findAllMessagesBetweenCurrentAndOtherUser(sender,receiver,request);
63+
log.info("Page<UserAccountChatMessage> user2UserMessagePage size: "+user2UserMessagePage.stream().count());
64+
log.info("-----------------------------------------------------------------------------------------------");
65+
for(UserAccountChatMessage userAccountChatMessage : user2UserMessagePage){
66+
userAccountChatMessage.setReadByReceiver(true);
67+
user2UserMessageList.add(userAccountChatMessage);
68+
/*
69+
if((!userAccountChatMessage.getReadByReceiver()) && (receiver.getId().longValue()== userAccountChatMessage.getReceiver().getId().longValue())){
70+
userAccountChatMessage.setReadByReceiver(true);
71+
userMessageRepository.saveAndFlush(userAccountChatMessage);
72+
}
73+
*/
74+
}
75+
log.info("-----------------------------------------------------------------------------------------------");
76+
log.info("userMessageRepository.saveAll(user2UserMessageList)");
77+
chatMessageService.saveAll(user2UserMessageList);
78+
log.info("-----------------------------------------------------------------------------------------------");
79+
return chatMessageService.findAllMessagesBetweenCurrentAndOtherUser(sender,receiver,request);
80+
}
81+
}

0 commit comments

Comments
 (0)