Skip to content

Commit

Permalink
Merge pull request #52 from goormthon-Univ/chat
Browse files Browse the repository at this point in the history
[Fix] ๋ฉ”์‹œ์ง€ ์ฑ„ํŒ… ์‘๋‹ต ์ˆ˜์ •
  • Loading branch information
Lujaec authored Mar 23, 2024
2 parents a9a78e4 + e9899a4 commit d469bee
Show file tree
Hide file tree
Showing 14 changed files with 154 additions and 31 deletions.
8 changes: 8 additions & 0 deletions src/main/java/com/teamkrews/User/model/UserInfo.java
Original file line number Diff line number Diff line change
Expand Up @@ -8,4 +8,12 @@
public class UserInfo {
private String nickName;
private String profileImageUrl;
private final String ANONYMOUS_PROFILE_IMAGE_URL =
"https://teamkrewsbucket.s3.ap-northeast-2.amazonaws.com/TeamKewsAnonymousProfileImage.png";
public static UserInfo getAnonymousUserInfo(){
UserInfo userInfo = new UserInfo();
userInfo.setNickName("์ต๋ช…");
userInfo.setProfileImageUrl("ANONYMOUS_PROFILE_IMAGE_URL");
return userInfo;
}
}
16 changes: 16 additions & 0 deletions src/main/java/com/teamkrews/User/model/UserInfos.java
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
package com.teamkrews.User.model;

import lombok.Getter;
import lombok.Setter;

import java.util.List;

@Getter
@Setter
public class UserInfos {
private List<UserInfo> userInfoList;

public UserInfos(List<UserInfo> userInfoList) {
this.userInfoList = userInfoList;
}
}
11 changes: 11 additions & 0 deletions src/main/java/com/teamkrews/User/service/UserService.java
Original file line number Diff line number Diff line change
Expand Up @@ -4,6 +4,7 @@
import com.teamkrews.User.model.User;
import com.teamkrews.User.model.UserInfo;
import com.teamkrews.User.model.UserInfoUpdateDto;
import com.teamkrews.User.model.UserInfos;
import com.teamkrews.User.repository.UserRepository;

import com.teamkrews.global.exception.CustomException;
Expand All @@ -13,7 +14,9 @@
import lombok.extern.slf4j.Slf4j;
import org.springframework.stereotype.Service;

import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

@Service
@RequiredArgsConstructor
Expand Down Expand Up @@ -57,4 +60,12 @@ public UserInfo convertToInfo(User user){
userInfo.setProfileImageUrl(user.getProfileImageUrl());
return userInfo;
}

public UserInfos convertToInfos(List<User> userList){
List<UserInfo> userInfoList = userList.stream().map(
(user) -> convertToInfo(user)
).collect(Collectors.toList());

return new UserInfos(userInfoList);
}
}
Original file line number Diff line number Diff line change
@@ -1,7 +1,6 @@
package com.teamkrews.chatRoomUser.model.response;

import com.teamkrews.User.model.UserInfo;
import com.teamkrews.message.model.request.MessageDTO;
import com.teamkrews.User.model.UserInfos;
import com.teamkrews.message.model.response.MessageResponse;
import lombok.Getter;
import lombok.Setter;
Expand All @@ -11,6 +10,6 @@
public class ChatRoomUserResponse {
private Long chatRoomId;
private Long chatRoomUserId;
private UserInfo targetUser;
private UserInfos targetUsers;
private MessageResponse lastMessage;
}
Original file line number Diff line number Diff line change
Expand Up @@ -6,7 +6,11 @@
import com.teamkrews.workspace.model.Workspace;
import java.util.List;
import java.util.Optional;

import org.hibernate.jdbc.Work;
import org.springframework.data.jpa.repository.JpaRepository;
import org.springframework.data.jpa.repository.Query;
import org.springframework.data.repository.query.Param;
import org.springframework.stereotype.Repository;


Expand All @@ -23,4 +27,9 @@ public interface ChatRoomUserRepository extends JpaRepository<ChatRoomUser, Long
List<ChatRoomUser> findAllByChatRoomAndNewState(ChatRoom chatRoom, Boolean newState);

List<ChatRoomUser> findAllByChatRoom(ChatRoom chatRoom);

@Query("SELECT cru FROM ChatRoomUser cru WHERE cru.chatRoom = :chatRoom AND cru.user <> :user")
List<ChatRoomUser> findByChatRoomAndNotUser(@Param("chatRoom") ChatRoom chatRoom, @Param("user") User user);

List<ChatRoomUser> findAllByWorkspace(Workspace workspace);
}
Original file line number Diff line number Diff line change
@@ -1,15 +1,20 @@
package com.teamkrews.chatRoomUser.service;

import com.teamkrews.User.model.User;
import com.teamkrews.User.model.UserInfos;
import com.teamkrews.User.service.UserService;
import com.teamkrews.chatRoomUser.model.ChatRoomUser;
import com.teamkrews.chatRoomUser.model.response.ChatRoomUserResponse;
import com.teamkrews.chatRoomUser.model.response.ChatRoomUserResponses;
import com.teamkrews.chatRoomUser.repository.ChatRoomUserRepository;
import com.teamkrews.chatroom.model.ChatRoom;
import com.teamkrews.global.exception.CustomException;
import com.teamkrews.global.exception.ErrorCode;
import com.teamkrews.message.service.MessageService;
import com.teamkrews.workspace.model.Workspace;
import lombok.RequiredArgsConstructor;
import org.springframework.stereotype.Service;
import org.springframework.transaction.annotation.Transactional;

import java.util.List;
import java.util.Optional;
Expand All @@ -31,24 +36,59 @@ public ChatRoomUser findById(final Long chatRoomUserId){
return chatRoomUserOptional.get();
}

public ChatRoomUserResponse convertToResponse(ChatRoomUser chatRoomUser){
public ChatRoomUserResponse convertToResponse(ChatRoomUser chatRoomUser, UserInfos userInfos){
ChatRoomUserResponse chatRoomUserResponse = new ChatRoomUserResponse();

chatRoomUserResponse.setChatRoomUserId(chatRoomUser.getId());
chatRoomUserResponse.setChatRoomId(chatRoomUser.getChatRoom().getChatRoomId());
chatRoomUserResponse.setLastMessage(messageService.convertMessageResponse(chatRoomUser.getLastMessage()));
chatRoomUserResponse.setTargetUser(userService.convertToInfo(chatRoomUser.getUser()));
chatRoomUserResponse.setLastMessage(messageService.convertMessageResponse(chatRoomUser.getLastMessage(), null));
chatRoomUserResponse.setTargetUsers(userInfos);

return chatRoomUserResponse;
}

public ChatRoomUserResponses convertToResponses(List<ChatRoomUser> chatRoomUserList){
List<ChatRoomUserResponse> chatRoomUserResponseList = chatRoomUserList.stream().map(
(chatRoomUser) ->
convertToResponse(chatRoomUser)
(chatRoomUser) -> {
List<ChatRoomUser> otherChatRoomUsers = chatRoomUserRepository.
findByChatRoomAndNotUser(chatRoomUser.getChatRoom(), chatRoomUser.getUser());

List<User> otherUsers = otherChatRoomUsers.stream().map((otherChatRoomUser) ->
otherChatRoomUser.getUser()
).collect(Collectors.toList());

UserInfos otherUserInfos = userService.convertToInfos(otherUsers);

return convertToResponse(chatRoomUser, otherUserInfos);
}

).collect(Collectors.toList());

return new ChatRoomUserResponses(chatRoomUserResponseList);
}

@Transactional
public void joinGroupChatRoom(User user, Workspace workspace){
List<ChatRoomUser> chatRoomUsers = chatRoomUserRepository.findAllByWorkspace(workspace);

ChatRoomUser groupChatRoomUser = null;
for (ChatRoomUser chatRoomUser : chatRoomUsers) {
if(chatRoomUser.getChatRoom().getIsGroup()){
groupChatRoomUser = chatRoomUser;
break;
}
}

if (groupChatRoomUser == null) return;

ChatRoom groupChatRoom = groupChatRoomUser.getChatRoom();
groupChatRoom.setUserCnt(groupChatRoom.getUserCnt() + 1);

ChatRoomUser chatRoomUser = new ChatRoomUser();
chatRoomUser.setChatRoom(groupChatRoom);
chatRoomUser.setUser(user);
chatRoomUser.setWorkspace(workspace);
chatRoomUser.setIsCreator(0);
chatRoomUserRepository.save(chatRoomUser);
}
}
13 changes: 6 additions & 7 deletions src/main/java/com/teamkrews/chatroom/model/ChatRoom.java
Original file line number Diff line number Diff line change
@@ -1,11 +1,7 @@
package com.teamkrews.chatroom.model;

import jakarta.persistence.Column;
import jakarta.persistence.Entity;
import jakarta.persistence.GeneratedValue;
import jakarta.persistence.GenerationType;
import jakarta.persistence.Id;
import jakarta.persistence.Table;
import com.teamkrews.User.model.User;
import jakarta.persistence.*;
import lombok.Getter;
import lombok.Setter;

Expand All @@ -19,6 +15,9 @@ public class ChatRoom {
@GeneratedValue(strategy = GenerationType.IDENTITY)
@Column(name = "chat_room_id")
private Long chatRoomId;

private Long userCnt;
private Boolean isGroup;
@ManyToOne
@JoinColumn(name = "id")
private User creator;
}
Original file line number Diff line number Diff line change
Expand Up @@ -11,4 +11,12 @@ public class ChatRoomCreationDto {
private String workspaceUUID;
private Long creatorUserId;
private List<Long> userIds;
private Boolean isGroup = Boolean.FALSE;

public ChatRoomCreationDto(String workspaceUUID, Long creatorUserId, List<Long> userIds, Boolean isGroup) {
this.workspaceUUID = workspaceUUID;
this.creatorUserId = creatorUserId;
this.userIds = userIds;
this.isGroup = isGroup;
}
}
Original file line number Diff line number Diff line change
Expand Up @@ -17,6 +17,7 @@
import java.util.HashSet;
import java.util.List;
import java.util.Optional;
import java.util.stream.Collectors;

import com.teamkrews.workspace.service.WorkspaceService;
import lombok.RequiredArgsConstructor;
Expand Down Expand Up @@ -58,7 +59,8 @@ public ChatRoomResponse createChatRoomWithUser(ChatRoomCreationDto dto) {

ChatRoom chatRoom = new ChatRoom();
chatRoom.setUserCnt(Long.valueOf(userIdsSet.size()));

chatRoom.setIsGroup(dto.getIsGroup());
chatRoom.setCreator(userService.getById(dto.getCreatorUserId()));
ChatRoom savedChatRoom = chatRoomRepository.save(chatRoom);

userIdsSet.stream().forEach((id)->{
Expand All @@ -77,7 +79,6 @@ public ChatRoomResponse createChatRoomWithUser(ChatRoomCreationDto dto) {

return chatRoomResponse;
}

private void createAndSaveChatRoomUser(ChatRoom chatRoom, User user, Workspace workspace, int isCreator) {
ChatRoomUser chatRoomUser = new ChatRoomUser();
chatRoomUser.setChatRoom(chatRoom);
Expand All @@ -89,7 +90,6 @@ private void createAndSaveChatRoomUser(ChatRoom chatRoom, User user, Workspace w

// ๋‚ด๊ฐ€ ๋ณด๋‚ธ ์ฑ„ํŒ…๋ฐฉ ์กฐํšŒ
public ChatRoomUserResponses getChatRoomsOfSent(User user, String workspaceUUID) {

Workspace workspace = workspaceService.findByUUID(workspaceUUID);
List<ChatRoomUser> chatRoomUserSent = chatRoomUserRepository.findByUserAndWorkspaceAndIsCreator(user, workspace, 1);

Expand Down Expand Up @@ -120,7 +120,6 @@ public void setNewStateTrue(ChatRoomNewStateTrueDto dto){

@Transactional
public void setNewStateFalse(ChatRoomNewStateFalseDto dto){

ChatRoomUser chatRoomUser = chatRoomUserService.findById(dto.getChatRoomUserId());
chatRoomUser.setNewState(dto.getNewState());
}
Expand All @@ -135,4 +134,6 @@ public void updateLastMessage(Long chatRoomId, Message message){
chatRoomUser.setLastMessage(message);
});
}


}
Original file line number Diff line number Diff line change
@@ -1,6 +1,8 @@
package com.teamkrews.message.controller;

import com.teamkrews.User.model.User;
import com.teamkrews.User.model.UserInfo;
import com.teamkrews.User.service.UserService;
import com.teamkrews.auth.controller.AuthenticationPrincipal;
import com.teamkrews.chatroom.model.ChatRoom;
import com.teamkrews.chatroom.model.ChatRoomNewStateTrueDto;
Expand Down Expand Up @@ -41,7 +43,7 @@
@RequestMapping("/message")
@Slf4j
public class MessageController {

private final UserService userService;
private final MessageService messageService;
private final ChatRoomService chatRoomService;
private final ChatRoomUserRepository chatRoomUserRepository;
Expand Down Expand Up @@ -75,22 +77,27 @@ public ResponseEntity<ApiResponse<MessageResponses>> getMessagesWithUserAndWorks
@MessageMapping("/message/{chatRoomId}") // /pub/message/{chatRoomId}๋กœ ๋‚ ๋ฆฐ ๋ฐ์ดํ„ฐ์— ๋Œ€ํ•ด /sub/message/{chatRoomId} ๊ตฌ๋…์ž๋“ค์—๊ฒŒ ๋ฉ”์‹œ์ง€ ์ „์†ก
@SendTo("/message/room/{chatRoomId}")
public MessageResponse sendAndSaveMessage(@DestinationVariable Long chatRoomId, @Payload MessageDTO messageDTO) {

log.info("Message Catch !!");

// ๋ฉ”์‹œ์ง€ ๋งํˆฌ ๋ณ€ํ™˜
String transformedMessage = messageTranslatorService.transformMessage(messageDTO);
messageDTO.setContent(transformedMessage);


// ๋ฉ”์‹œ์ง€ ์ €์žฅ
ChatRoom chatRoom = chatRoomService.findById(chatRoomId);
Message message = messageService.saveMessage(chatRoom, messageDTO);

// ๋ฉ”์‹œ์ง€ ๋ฐ›์•˜์„ ๋•Œ ์ฒ˜๋ฆฌ
chatRoomService.updateLastMessage(chatRoomId, message);
chatRoomService.setNewStateTrue(new ChatRoomNewStateTrueDto(chatRoomId));
MessageResponse messageResponse = messageService.convertMessageResponse(message);

return messageResponse;
User chatRoomCreator = chatRoom.getCreator();
User sendUser = userService.getById(messageDTO.getSenderId());

if(chatRoomCreator.getId() == sendUser.getId())
return messageService.convertMessageResponse(message, UserInfo.getAnonymousUserInfo());

return messageService.convertMessageResponse(message, userService.convertToInfo(sendUser));
}

// ๋งํˆฌ ๋ณ€ํ™˜ ํ…Œ์ŠคํŠธ
Expand Down
Original file line number Diff line number Diff line change
@@ -1,15 +1,14 @@
package com.teamkrews.message.model.response;

import com.teamkrews.User.model.UserInfo;
import lombok.Getter;
import lombok.Setter;

@Getter
@Setter
public class MessageResponse {

private Long senderId;

private String content;

private String dateTime;
private UserInfo userInfo;
}
14 changes: 10 additions & 4 deletions src/main/java/com/teamkrews/message/service/MessageService.java
Original file line number Diff line number Diff line change
@@ -1,8 +1,10 @@
package com.teamkrews.message.service;

import com.teamkrews.User.model.User;
import com.teamkrews.User.model.UserInfo;
import com.teamkrews.User.service.UserService;
import com.teamkrews.chatroom.model.ChatRoom;
import com.teamkrews.message.model.Message;
import com.teamkrews.chatroom.service.ChatRoomService;
import com.teamkrews.message.model.request.MessageDTO;
import com.teamkrews.message.model.response.MessageResponse;
import com.teamkrews.message.model.response.MessageResponses;
Expand All @@ -18,7 +20,7 @@
@RequiredArgsConstructor
@Service
public class MessageService {

private final UserService userService;
private final MessageRepository messageRepository;
private final ModelMapper mapper;
private DateTimeFormatter formatter = DateTimeFormatter.ofPattern("yyyy๋…„ MM์›” dd์ผ HH์‹œ mm๋ถ„");
Expand All @@ -38,12 +40,13 @@ public Message saveMessage(ChatRoom chatRoom, MessageDTO messageDTO) {
return messageRepository.save(message);
}

public MessageResponse convertMessageResponse(Message message){
public MessageResponse convertMessageResponse(Message message, UserInfo userInfo){
if (message == null)
return null;

MessageResponse messageResponse = mapper.map(message, MessageResponse.class);
messageResponse.setDateTime(message.getCreatedAt().format(formatter));
messageResponse.setUserInfo(userInfo);
return messageResponse;
}

Expand All @@ -52,7 +55,10 @@ public MessageResponses convertMessageResponses(List<Message> messages){
return null;

List<MessageResponse> messageResponseList = messages.stream().map(
(message) -> convertMessageResponse(message)
(message) -> {
User user = userService.getById(message.getSenderId());
return convertMessageResponse(message, userService.convertToInfo(user));
}
).collect(Collectors.toList());

return new MessageResponses(messageResponseList);
Expand Down
Loading

0 comments on commit d469bee

Please sign in to comment.