Skip to content

Commit a136643

Browse files
committed
Feat: 채팅방 제목 수정
1 parent b98d014 commit a136643

File tree

7 files changed

+62
-2
lines changed

7 files changed

+62
-2
lines changed

src/main/java/cmf/commitField/domain/chat/chatRoom/controller/ChatRoomController.java

Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cmf.commitField.domain.chat.chatRoom.controller;
22

33
import cmf.commitField.domain.chat.chatRoom.controller.request.ChatRoomRequest;
4+
import cmf.commitField.domain.chat.chatRoom.controller.request.ChatRoomUpdateRequest;
45
import cmf.commitField.domain.chat.chatRoom.dto.ChatRoomDto;
56
import cmf.commitField.domain.chat.chatRoom.service.ChatRoomService;
67
import cmf.commitField.domain.user.entity.CustomOAuth2User;
@@ -113,6 +114,23 @@ public GlobalResponse<Object> getByUserRoomPartList(Pageable pageable) {
113114
}
114115
}
115116

117+
@PutMapping("/room/update/{roomId}")
118+
@LoginCheck
119+
public GlobalResponse<Object> updateRoom(
120+
@PathVariable Long roomId,
121+
@RequestBody @Valid ChatRoomUpdateRequest chatRoomUpdateRequest) {
122+
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
123+
124+
if (authentication instanceof OAuth2AuthenticationToken) {
125+
CustomOAuth2User principal = (CustomOAuth2User) authentication.getPrincipal();
126+
Long userId = principal.getId(); // getId()를 통해 userId를 추출
127+
chatRoomService.updateRoom(roomId, chatRoomUpdateRequest, userId); // userId를 전달
128+
return GlobalResponse.success("채팅방을 업데이트 했습니다.");
129+
} else {
130+
throw new IllegalArgumentException("로그인 후에 이용해 주세요.");
131+
}
132+
}
133+
116134
// 채팅방 나가기
117135
@DeleteMapping("/room/out/{roomId}")
118136
@LoginCheck
Lines changed: 16 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
package cmf.commitField.domain.chat.chatRoom.controller.request;
2+
3+
import jakarta.validation.constraints.NotEmpty;
4+
import lombok.AllArgsConstructor;
5+
import lombok.Getter;
6+
import lombok.NoArgsConstructor;
7+
import org.hibernate.validator.constraints.Length;
8+
9+
@Getter
10+
@AllArgsConstructor
11+
@NoArgsConstructor
12+
public class ChatRoomUpdateRequest {
13+
@NotEmpty
14+
@Length(min = 2, max = 20)
15+
private String title;
16+
}

src/main/java/cmf/commitField/domain/chat/chatRoom/entity/ChatRoom.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -8,6 +8,7 @@
88
import lombok.*;
99
import lombok.experimental.SuperBuilder;
1010

11+
import java.time.LocalDateTime;
1112
import java.util.List;
1213

1314
@Entity
@@ -49,4 +50,8 @@ public String toString() {
4950
", userChatRooms=" + (userChatRooms != null ? userChatRooms.size() : 0) + // userChatRooms 리스트가 null일 수 있기 때문에 체크
5051
'}';
5152
}
53+
public void update(String title, LocalDateTime modifiedAt) {
54+
this.setTitle(title);
55+
this.setModifiedAt(modifiedAt);
56+
}
5257
}

src/main/java/cmf/commitField/domain/chat/chatRoom/service/ChatRoomService.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,6 +1,7 @@
11
package cmf.commitField.domain.chat.chatRoom.service;
22

33
import cmf.commitField.domain.chat.chatRoom.controller.request.ChatRoomRequest;
4+
import cmf.commitField.domain.chat.chatRoom.controller.request.ChatRoomUpdateRequest;
45
import cmf.commitField.domain.chat.chatRoom.dto.ChatRoomDto;
56
import org.springframework.data.domain.Pageable;
67

@@ -23,4 +24,6 @@ public interface ChatRoomService {
2324
void outRoom(Long userId, Long roomId);
2425

2526
void deleteRoom(Long userId, Long roomId);
27+
//채팅방 제목 수정
28+
void updateRoom(Long roomId, ChatRoomUpdateRequest chatRoomUpdateRequest, Long userId);
2629
}

src/main/java/cmf/commitField/domain/chat/chatRoom/service/ChatRoomServiceImpl.java

Lines changed: 16 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,7 @@
22

33
import cmf.commitField.domain.chat.chatMessage.repository.ChatMessageRepository;
44
import cmf.commitField.domain.chat.chatRoom.controller.request.ChatRoomRequest;
5+
import cmf.commitField.domain.chat.chatRoom.controller.request.ChatRoomUpdateRequest;
56
import cmf.commitField.domain.chat.chatRoom.dto.ChatRoomDto;
67
import cmf.commitField.domain.chat.chatRoom.entity.ChatRoom;
78
import cmf.commitField.domain.chat.chatRoom.repository.ChatRoomRepository;
@@ -17,7 +18,6 @@
1718
import org.springframework.data.domain.Page;
1819
import org.springframework.data.domain.Pageable;
1920
import org.springframework.stereotype.Service;
20-
import org.springframework.transaction.annotation.Isolation;
2121
import org.springframework.transaction.annotation.Transactional;
2222

2323
import java.time.LocalDateTime;
@@ -114,7 +114,7 @@ public List<ChatRoomDto> getUserByRoomPartList(Long userId, Pageable pageable) {
114114
}
115115

116116
@Override
117-
@Transactional(isolation = Isolation.READ_UNCOMMITTED)
117+
@Transactional
118118
public void joinRoom(Long roomId, Long userId) {
119119
RLock lock = redissonClient.getLock("joinRoomLock:" + roomId);
120120
try {
@@ -191,6 +191,20 @@ public void deleteRoom(Long userId, Long roomId) {
191191

192192
}
193193

194+
@Override
195+
public void updateRoom(Long roomId, ChatRoomUpdateRequest chatRoomUpdateRequest, Long userId) {
196+
ChatRoom room = getChatRoom(roomId);
197+
String currentRoomTitle = room.getTitle();
198+
if (!room.getRoomCreator().equals(userId)) {
199+
throw new CustomException(ErrorCode.NOT_ROOM_CREATOR);
200+
}
201+
if (currentRoomTitle.equals(chatRoomUpdateRequest.getTitle())) {
202+
throw new CustomException(ErrorCode.REQUEST_SAME_AS_CURRENT_TITLE);
203+
}
204+
room.update(chatRoomUpdateRequest.getTitle(), LocalDateTime.now());
205+
chatRoomRepository.save(room);
206+
}
207+
194208
private User getUser(Long userId) {
195209
return userRepository.findById(userId)
196210
.orElseThrow(() -> new CustomException(ErrorCode.NOT_FOUND_USER));

src/main/java/cmf/commitField/global/error/ErrorCode.java

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -46,6 +46,9 @@ public enum ErrorCode {
4646
NO_ROOM_FOUND(HttpStatus.NOT_FOUND, "채팅방이 없습니다."),
4747
NO_ROOM(HttpStatus.NOT_FOUND, "존재하지 않는 채팅방입니다."),
4848

49+
//chatroom_title
50+
REQUEST_SAME_AS_CURRENT_TITLE(HttpStatus.BAD_REQUEST, "현재 제목과 바꾸려는 제목이 같습니다."),
51+
4952
//user_chatroom
5053
NONE_ROOM(HttpStatus.NOT_FOUND, "사용자가 들어가 있는 방이 없습니다."),
5154
NOT_ROOM_CREATOR(HttpStatus.FORBIDDEN, "방 생성자가 아닙니다."),

src/main/java/cmf/commitField/global/jpa/BaseEntity.java

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -18,6 +18,7 @@
1818
@NoArgsConstructor(access = PROTECTED)
1919
@AllArgsConstructor(access = PROTECTED)
2020
@Getter
21+
@Setter
2122
@SuperBuilder
2223
@EntityListeners(AuditingEntityListener.class)
2324
@ToString

0 commit comments

Comments
 (0)