Skip to content

Commit 9f5c0e1

Browse files
committed
feat : 채팅방 리스트에 참여인원 추가 (#112)
1 parent f63a60e commit 9f5c0e1

File tree

6 files changed

+56
-14
lines changed

6 files changed

+56
-14
lines changed

src/main/java/shop/fevertime/backend/api/ChatApiController.java

Lines changed: 7 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -4,28 +4,29 @@
44
import org.springframework.messaging.handler.annotation.MessageMapping;
55
import org.springframework.messaging.simp.SimpMessageSendingOperations;
66
import org.springframework.stereotype.Controller;
7+
import shop.fevertime.backend.domain.ChatRoom;
78
import shop.fevertime.backend.dto.ChatMessageDto;
9+
import shop.fevertime.backend.service.ChatRoomService;
810

911
@Controller
1012
@RequiredArgsConstructor
1113
public class ChatApiController {
1214

13-
private final SimpMessageSendingOperations messagingTemplate;
15+
private final ChatRoomService chatRoomService;
1416

1517
@MessageMapping("/chat/enter")
16-
public void enter(ChatMessageDto messageDto){
17-
18-
messagingTemplate.convertAndSend("/sub/chat/room/" + messageDto.getRoomId(), messageDto);
18+
public void enter(ChatMessageDto messageDto) {
19+
chatRoomService.enterRoom(messageDto);
1920
}
2021

2122
@MessageMapping("/chat/message")
2223
public void message(ChatMessageDto messageDto) {
23-
messagingTemplate.convertAndSend("/sub/chat/room/" + messageDto.getRoomId(), messageDto);
24+
chatRoomService.sendMsg(messageDto);
2425
}
2526

2627
@MessageMapping("/chat/exit")
2728
public void exit(ChatMessageDto messageDto) {
28-
messagingTemplate.convertAndSend("/sub/chat/room/" + messageDto.getRoomId(), messageDto);
29+
chatRoomService.exitRoom(messageDto);
2930
}
3031

3132
}

src/main/java/shop/fevertime/backend/domain/ChatRoom.java

Lines changed: 14 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -9,7 +9,7 @@
99
@Getter
1010
@NoArgsConstructor(access = AccessLevel.PROTECTED)
1111
@Entity
12-
public class ChatRoom extends BaseTimeEntity{
12+
public class ChatRoom extends BaseTimeEntity {
1313

1414
@Id
1515
@GeneratedValue(strategy = GenerationType.AUTO)
@@ -23,9 +23,21 @@ public class ChatRoom extends BaseTimeEntity{
2323
@JoinColumn(name = "user_id")
2424
private User user;
2525

26-
public ChatRoom(String name, User user) {
26+
@Column(nullable = false)
27+
private int userCount;
28+
29+
public ChatRoom(String name, User user, int userCount) {
2730
this.name = name;
2831
this.user = user;
32+
this.userCount = userCount;
33+
}
34+
35+
public void addUserCount() {
36+
this.userCount++;
37+
}
38+
39+
public void minusUserCount() {
40+
this.userCount--;
2941
}
3042

3143
}

src/main/java/shop/fevertime/backend/dto/ChatMessageDto.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,7 @@
66
@Getter
77
@Setter
88
public class ChatMessageDto {
9-
private String roomId;
9+
private Long roomId;
1010
private String sender;
1111
private String message;
1212
}

src/main/java/shop/fevertime/backend/dto/request/ChatRoomRequestDto.java

Lines changed: 1 addition & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -9,8 +9,5 @@
99
@NoArgsConstructor
1010
public class ChatRoomRequestDto {
1111
private String name;
12-
13-
public ChatRoomRequestDto(String name) {
14-
this.name = name;
15-
}
12+
private int userCount;
1613
}

src/main/java/shop/fevertime/backend/dto/response/ChatRoomResponseDto.java

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -15,12 +15,14 @@ public class ChatRoomResponseDto {
1515
private String name;
1616
private String createdDate;
1717
private String creator;
18+
private int userCount;
1819

1920
public ChatRoomResponseDto(ChatRoom chatRoom) {
2021
this.roomId = chatRoom.getId();
2122
this.name= chatRoom.getName();
2223
this.createdDate = chatRoom.getCreatedDate().format(DateTimeFormatter.ofPattern("yyyy-MM-dd"));
2324
this.creator = chatRoom.getUser().getKakaoId();
25+
this.userCount = chatRoom.getUserCount();
2426
}
2527

2628
}

src/main/java/shop/fevertime/backend/service/ChatRoomService.java

Lines changed: 31 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -2,10 +2,12 @@
22

33
import lombok.RequiredArgsConstructor;
44
import lombok.extern.slf4j.Slf4j;
5+
import org.springframework.messaging.simp.SimpMessageSendingOperations;
56
import org.springframework.stereotype.Service;
67
import org.springframework.transaction.annotation.Transactional;
78
import shop.fevertime.backend.domain.ChatRoom;
89
import shop.fevertime.backend.domain.User;
10+
import shop.fevertime.backend.dto.ChatMessageDto;
911
import shop.fevertime.backend.dto.response.ChatRoomResponseDto;
1012
import shop.fevertime.backend.dto.request.ChatRoomRequestDto;
1113
import shop.fevertime.backend.exception.ApiRequestException;
@@ -20,6 +22,7 @@
2022
public class ChatRoomService {
2123

2224
private final ChatRoomRepository chatRoomRepository;
25+
private final SimpMessageSendingOperations messagingTemplate;
2326

2427
@Transactional
2528
public List<ChatRoomResponseDto> getAllRooms() {
@@ -31,7 +34,7 @@ public List<ChatRoomResponseDto> getAllRooms() {
3134

3235
@Transactional
3336
public void createRoom(ChatRoomRequestDto chatRoomDto, User user) {
34-
chatRoomRepository.save(new ChatRoom(chatRoomDto.getName(), user));
37+
chatRoomRepository.save(new ChatRoom(chatRoomDto.getName(), user, chatRoomDto.getUserCount()));
3538
}
3639

3740
@Transactional
@@ -49,4 +52,31 @@ public void deleteRoom(Long roomId, User user) {
4952
chatRoomRepository.delete(chatRoom);
5053
}
5154

55+
@Transactional
56+
public void enterRoom(ChatMessageDto messageDto) {
57+
ChatRoom chatRoom = chatRoomRepository.findById(messageDto.getRoomId()).orElseThrow(
58+
() -> new ApiRequestException("해당 채팅방이 없습니다.")
59+
);
60+
//인원수 증가
61+
chatRoom.addUserCount();
62+
//메시지 전송
63+
messagingTemplate.convertAndSend("/sub/chat/room/" + messageDto.getRoomId(), messageDto);
64+
}
65+
66+
@Transactional
67+
public void sendMsg(ChatMessageDto messageDto) {
68+
//메시지 전송
69+
messagingTemplate.convertAndSend("/sub/chat/room/" + messageDto.getRoomId(), messageDto);
70+
}
71+
72+
@Transactional
73+
public void exitRoom(ChatMessageDto messageDto) {
74+
ChatRoom chatRoom = chatRoomRepository.findById(messageDto.getRoomId()).orElseThrow(
75+
() -> new ApiRequestException("해당 채팅방이 없습니다.")
76+
);
77+
//인원수 감소
78+
chatRoom.minusUserCount();
79+
//메시지 전송
80+
messagingTemplate.convertAndSend("/sub/chat/room/" + messageDto.getRoomId(), messageDto);
81+
}
5282
}

0 commit comments

Comments
 (0)