Skip to content

Commit 268c015

Browse files
authored
Merge pull request #88 from CommitField/feat/#20
Feat/#20
2 parents e79cda3 + 3e96a16 commit 268c015

File tree

17 files changed

+197
-29
lines changed

17 files changed

+197
-29
lines changed

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

Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
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;
6+
import cmf.commitField.domain.chat.chatRoom.dto.ChatRoomUserDto;
57
import cmf.commitField.domain.chat.chatRoom.service.ChatRoomService;
68
import cmf.commitField.domain.user.entity.CustomOAuth2User;
79
import cmf.commitField.global.error.ErrorCode;
@@ -113,6 +115,23 @@ public GlobalResponse<Object> getByUserRoomPartList(Pageable pageable) {
113115
}
114116
}
115117

118+
@PutMapping("/room/update/{roomId}")
119+
@LoginCheck
120+
public GlobalResponse<Object> updateRoom(
121+
@PathVariable Long roomId,
122+
@RequestBody @Valid ChatRoomUpdateRequest chatRoomUpdateRequest) {
123+
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
124+
125+
if (authentication instanceof OAuth2AuthenticationToken) {
126+
CustomOAuth2User principal = (CustomOAuth2User) authentication.getPrincipal();
127+
Long userId = principal.getId(); // getId()๋ฅผ ํ†ตํ•ด userId๋ฅผ ์ถ”์ถœ
128+
chatRoomService.updateRoom(roomId, chatRoomUpdateRequest, userId); // userId๋ฅผ ์ „๋‹ฌ
129+
return GlobalResponse.success("์ฑ„ํŒ…๋ฐฉ์„ ์—…๋ฐ์ดํŠธ ํ–ˆ์Šต๋‹ˆ๋‹ค.");
130+
} else {
131+
throw new IllegalArgumentException("๋กœ๊ทธ์ธ ํ›„์— ์ด์šฉํ•ด ์ฃผ์„ธ์š”.");
132+
}
133+
}
134+
116135
// ์ฑ„ํŒ…๋ฐฉ ๋‚˜๊ฐ€๊ธฐ
117136
@DeleteMapping("/room/out/{roomId}")
118137
@LoginCheck
@@ -147,4 +166,23 @@ public GlobalResponse<Object> deleteRoom(
147166
}
148167
}
149168

169+
//์ฑ„ํŒ…๋ฐฉ ์œ ์ € ๋ชฉ๋ก ์กฐํšŒ
170+
@GetMapping("/room/users/{roomId}")
171+
@LoginCheck
172+
public GlobalResponse<Object> getRoomUsers(
173+
@PathVariable Long roomId) {
174+
Authentication authentication = SecurityContextHolder.getContext().getAuthentication();
175+
176+
if (authentication instanceof OAuth2AuthenticationToken) {
177+
CustomOAuth2User principal = (CustomOAuth2User) authentication.getPrincipal();
178+
Long userId = principal.getId(); // Extract userId from the principal
179+
List<ChatRoomUserDto> roomUsers = chatRoomService.getRoomUsers(roomId, userId);
180+
return GlobalResponse.success(roomUsers);
181+
} else {
182+
throw new IllegalArgumentException("๋กœ๊ทธ์ธ ํ›„์— ์ด์šฉํ•ด ์ฃผ์„ธ์š”.");
183+
}
184+
}
185+
186+
187+
150188
}
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+
}
Lines changed: 13 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,13 @@
1+
package cmf.commitField.domain.chat.chatRoom.dto;
2+
3+
import lombok.*;
4+
5+
@Getter
6+
@Setter
7+
@NoArgsConstructor
8+
@AllArgsConstructor
9+
@Builder
10+
public class ChatRoomUserDto {
11+
private String nickname;
12+
private Boolean status;
13+
}

โ€Ž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/repository/ChatRoomRepository.javaโ€Ž

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -24,7 +24,7 @@ public interface ChatRoomRepository extends JpaRepository<ChatRoom, Long> {
2424

2525
Page<ChatRoom> findAllByUserChatRoomsUserId(Long userId,Pageable pageable);
2626

27-
@Query(value = "SELECT ROOM_CREATOR FROM chat_room WHERE CHAT_ROOM_ID = ?", nativeQuery = true)
27+
@Query(value = "SELECT ROOM_CREATOR FROM chat_room WHERE ID = ?", nativeQuery = true)
2828
Optional<Long> findChatRoomIdByRoomId(@Param("roomId") Long roomId);
2929

3030
}

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

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,9 @@
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;
6+
import cmf.commitField.domain.chat.chatRoom.dto.ChatRoomUserDto;
57
import org.springframework.data.domain.Pageable;
68

79
import java.util.List;
@@ -23,4 +25,8 @@ public interface ChatRoomService {
2325
void outRoom(Long userId, Long roomId);
2426

2527
void deleteRoom(Long userId, Long roomId);
28+
//์ฑ„ํŒ…๋ฐฉ ์ œ๋ชฉ ์ˆ˜์ •
29+
void updateRoom(Long roomId, ChatRoomUpdateRequest chatRoomUpdateRequest, Long userId);
30+
31+
List<ChatRoomUserDto> getRoomUsers(Long roomId, Long userId);
2632
}

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

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,9 @@
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;
7+
import cmf.commitField.domain.chat.chatRoom.dto.ChatRoomUserDto;
68
import cmf.commitField.domain.chat.chatRoom.entity.ChatRoom;
79
import cmf.commitField.domain.chat.chatRoom.repository.ChatRoomRepository;
810
import cmf.commitField.domain.chat.userChatRoom.entity.UserChatRoom;
@@ -17,7 +19,6 @@
1719
import org.springframework.data.domain.Page;
1820
import org.springframework.data.domain.Pageable;
1921
import org.springframework.stereotype.Service;
20-
import org.springframework.transaction.annotation.Isolation;
2122
import org.springframework.transaction.annotation.Transactional;
2223

2324
import java.time.LocalDateTime;
@@ -114,7 +115,7 @@ public List<ChatRoomDto> getUserByRoomPartList(Long userId, Pageable pageable) {
114115
}
115116

116117
@Override
117-
@Transactional(isolation = Isolation.READ_UNCOMMITTED)
118+
@Transactional
118119
public void joinRoom(Long roomId, Long userId) {
119120
RLock lock = redissonClient.getLock("joinRoomLock:" + roomId);
120121
try {
@@ -191,6 +192,20 @@ public void deleteRoom(Long userId, Long roomId) {
191192

192193
}
193194

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

205220
}
206221

222+
@Override
223+
@Transactional(readOnly = true)
224+
public List<ChatRoomUserDto> getRoomUsers(Long roomId, Long userId) {
225+
// ๋ฐฉ ์ •๋ณด
226+
getChatRoom(roomId);
227+
// ๋กœ๊ทธ์ธ ์œ ์ € ์ •๋ณด
228+
getUser(userId);
229+
// ๋ฐฉ์— ์žˆ๋Š” ์œ ์ € ์ •๋ณด
230+
List<UserChatRoom> userIds = userChatRoomRepository
231+
.findUserChatRoomByChatRoomId(roomId);
232+
// ๋ฐฉ์— ์žˆ์ง€ ์•Š์€ ์œ ์ €๋Š” ๋ณผ ์ˆ˜ ์—†์Œ
233+
List<Long> userIdList = new ArrayList<>();
234+
for (UserChatRoom chatRoom : userIds) {
235+
Long id = chatRoom.getUser().getId();
236+
userIdList.add(id);
237+
}
238+
if (!userIdList.contains(userId)) {
239+
throw new CustomException(ErrorCode.NOT_ROOM_MEMBER);
240+
}
241+
// DTO ๋‹ด๊ธฐ
242+
List<ChatRoomUserDto> chatRoomUserDtos = new ArrayList<>();
243+
for (UserChatRoom userChatRoom : userIds) {
244+
ChatRoomUserDto build = ChatRoomUserDto.builder()
245+
.nickname(userChatRoom.getUser().getNickname())
246+
.status(userChatRoom.getUser().getStatus())
247+
.build();
248+
chatRoomUserDtos.add(build);
249+
}
250+
return chatRoomUserDtos;
251+
}
252+
207253
}

โ€Žsrc/main/java/cmf/commitField/domain/chat/userChatRoom/dto/UserChatRoomDto.javaโ€Ž

Lines changed: 0 additions & 12 deletions
This file was deleted.

โ€Žsrc/main/java/cmf/commitField/domain/chat/userChatRoom/repository/UserChatRoomRepository.javaโ€Ž

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -31,5 +31,7 @@ public interface UserChatRoomRepository extends JpaRepository<UserChatRoom, Long
3131
@Query("select u.user.id from UserChatRoom u where u.chatRoom.id = ?1")
3232
List<Long> findUserChatRoomByChatRoom_Id(Long chatRoomId);
3333

34+
List<UserChatRoom> findUserChatRoomByChatRoomId(Long roomId);
35+
3436

3537
}

โ€Žsrc/main/java/cmf/commitField/domain/pet/entity/Pet.javaโ€Ž

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -27,14 +27,6 @@ public class Pet extends BaseEntity {
2727
@Enumerated(EnumType.STRING) // DB์— ์ €์žฅ๋  ๋•Œ String ํ˜•ํƒœ๋กœ ์ €์žฅ๋จ
2828
private Grow grow; // ์„ฑ์žฅ ์ •๋„
2929

30-
public enum Grow {
31-
EGG, HATCH, GROWN
32-
}
33-
34-
@ManyToOne(fetch = FetchType.LAZY)
35-
@JoinColumn(name = "user_id", nullable = false)
36-
private User user;
37-
3830
public Pet(String name, User user){
3931
Random random = new Random();
4032
this.type = random.nextInt(3);
@@ -51,4 +43,12 @@ public Pet(String name, User user){
5143
this.grow = Grow.EGG;
5244
this.user = user;
5345
}
46+
47+
@ManyToOne(fetch = FetchType.LAZY)
48+
@JoinColumn(name = "user_id", nullable = false)
49+
private User user;
50+
51+
public enum Grow {
52+
EGG, HATCH, GROWN
53+
}
5454
}

0 commit comments

Comments
ย (0)