Skip to content

Commit 1fd7e46

Browse files
committed
Merge remote-tracking branch 'origin/dev' into feat/6
# Conflicts: # backend/src/main/java/io/f1/backend/domain/game/api/RoomController.java # backend/src/main/java/io/f1/backend/domain/game/app/RoomService.java # backend/src/main/java/io/f1/backend/domain/game/mapper/RoomMapper.java # backend/src/main/java/io/f1/backend/domain/game/store/RoomRepository.java # backend/src/main/java/io/f1/backend/domain/game/store/RoomRepositoryImpl.java
2 parents 4c599cf + da50e5d commit 1fd7e46

File tree

10 files changed

+143
-7
lines changed

10 files changed

+143
-7
lines changed

backend/src/main/java/io/f1/backend/domain/game/api/RoomController.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -4,13 +4,15 @@
44
import io.f1.backend.domain.game.dto.request.RoomCreateRequest;
55
import io.f1.backend.domain.game.dto.request.RoomValidationRequest;
66
import io.f1.backend.domain.game.dto.response.RoomCreateResponse;
7+
import io.f1.backend.domain.game.dto.response.RoomListResponse;
78

89
import io.f1.backend.domain.game.dto.response.RoomValidationResponse;
910
import jakarta.validation.Valid;
1011

1112
import lombok.RequiredArgsConstructor;
1213

1314
import org.springframework.http.HttpStatus;
15+
import org.springframework.web.bind.annotation.GetMapping;
1416
import org.springframework.web.bind.annotation.PostMapping;
1517
import org.springframework.web.bind.annotation.RequestBody;
1618
import org.springframework.web.bind.annotation.RequestMapping;
@@ -42,4 +44,9 @@ public RoomCreateResponse saveRoom(@RequestBody @Valid RoomCreateRequest request
4244
public RoomValidationResponse validateRoom(@RequestBody RoomValidationRequest request) {
4345
return roomService.validateRoom(request);
4446
}
47+
48+
@GetMapping
49+
public RoomListResponse getAllRooms() {
50+
return roomService.getAllRooms();
51+
}
4552
}

backend/src/main/java/io/f1/backend/domain/game/app/RoomService.java

Lines changed: 34 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,7 @@
11
package io.f1.backend.domain.game.app;
22

3-
import static io.f1.backend.domain.game.mapper.RoomMapper.toGameSettingResponse;
4-
import static io.f1.backend.domain.game.mapper.RoomMapper.toPlayerListResponse;
5-
import static io.f1.backend.domain.game.mapper.RoomMapper.toRoomSetting;
6-
import static io.f1.backend.domain.game.mapper.RoomMapper.toRoomSettingResponse;
3+
import static io.f1.backend.domain.game.mapper.RoomMapper.*;
74

8-
import io.f1.backend.domain.game.dto.RoomInitialData;
95
import io.f1.backend.domain.game.dto.request.RoomCreateRequest;
106
import io.f1.backend.domain.game.dto.request.RoomValidationRequest;
117
import io.f1.backend.domain.game.dto.response.GameSettingResponse;
@@ -14,12 +10,22 @@
1410
import io.f1.backend.domain.game.dto.response.RoomCreateResponse;
1511
import io.f1.backend.domain.game.dto.response.RoomSettingResponse;
1612
import io.f1.backend.domain.game.dto.response.RoomValidationResponse;
13+
import io.f1.backend.domain.game.dto.response.RoomListResponse;
14+
import io.f1.backend.domain.game.dto.response.RoomResponse;
1715
import io.f1.backend.domain.game.model.GameSetting;
1816
import io.f1.backend.domain.game.model.Player;
1917
import io.f1.backend.domain.game.model.Room;
2018
import io.f1.backend.domain.game.model.RoomSetting;
2119
import io.f1.backend.domain.game.model.RoomState;
2220
import io.f1.backend.domain.game.store.RoomRepository;
21+
import io.f1.backend.domain.quiz.entity.Quiz;
22+
import io.f1.backend.domain.user.entity.User;
23+
24+
import lombok.RequiredArgsConstructor;
25+
26+
import org.springframework.stereotype.Service;
27+
28+
import java.util.List;
2329
import java.util.Map;
2430
import java.util.concurrent.atomic.AtomicLong;
2531
import lombok.RequiredArgsConstructor;
@@ -32,7 +38,6 @@
3238
public class RoomService {
3339

3440
private final RoomRepository roomRepository;
35-
3641
private final AtomicLong roomIdGenerator = new AtomicLong(0);
3742

3843
public RoomCreateResponse saveRoom(RoomCreateRequest request, Map<String, Object> loginUser) {
@@ -98,4 +103,27 @@ public RoomInitialData enterRoom(Long roomId, String sessionId) {
98103
return new RoomInitialData(destination, roomSettingResponse, gameSettingResponse,
99104
playerListResponse);
100105
}
106+
107+
// todo quizService에서 퀴즈 조회 메서드로 변경
108+
public RoomListResponse getAllRooms() {
109+
List<Room> rooms = roomRepository.findAll();
110+
List<RoomResponse> roomResponses =
111+
rooms.stream()
112+
.map(
113+
room -> {
114+
User user = new User(); // 임시 유저 객체
115+
user.setNickname("임시 유저 닉네임");
116+
117+
Quiz quiz = new Quiz(); // 임시 퀴즈 객체
118+
quiz.setTitle("임시 퀴즈 제목");
119+
quiz.setDescription("임시 퀴즈 설명");
120+
quiz.setThumbnailUrl("임시 이미지");
121+
quiz.setQuestions(List.of());
122+
quiz.setCreator(user);
123+
124+
return toRoomResponse(room, quiz);
125+
})
126+
.toList();
127+
return new RoomListResponse(roomResponses);
128+
}
101129
}
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
package io.f1.backend.domain.game.dto.response;
2+
3+
import java.util.List;
4+
5+
public record RoomListResponse(List<RoomResponse> rooms) {}
Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
package io.f1.backend.domain.game.dto.response;
2+
3+
public record RoomResponse(
4+
Long roomId,
5+
String roomName,
6+
int maxUserCount,
7+
int currentUserCount,
8+
boolean locked,
9+
String roomState,
10+
String quizTitle,
11+
String description,
12+
String creator,
13+
int numberOfQuestions,
14+
String thumbnailUrl) {}

backend/src/main/java/io/f1/backend/domain/game/mapper/RoomMapper.java

Lines changed: 18 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -8,14 +8,16 @@
88
import io.f1.backend.domain.game.dto.response.RoomSettingResponse;
99
import io.f1.backend.domain.game.model.GameSetting;
1010
import io.f1.backend.domain.game.model.Room;
11+
import io.f1.backend.domain.game.dto.response.RoomResponse;
1112
import io.f1.backend.domain.game.model.RoomSetting;
1213
import java.util.List;
14+
import io.f1.backend.domain.quiz.entity.Quiz;
1315

1416
public class RoomMapper {
1517

1618
public static RoomSetting toRoomSetting(RoomCreateRequest request) {
1719
return new RoomSetting(
18-
request.roomName(), request.maxUserCount(), request.locked(), request.password());
20+
request.roomName(), request.maxUserCount(), request.locked(), request.password());
1921
}
2022

2123
public static RoomSettingResponse toRoomSettingResponse(Room room) {
@@ -37,4 +39,19 @@ public static PlayerListResponse toPlayerListResponse(Room room) {
3739

3840
return new PlayerListResponse(room.getHost().getNickname(), playerResponseList);
3941
}
42+
43+
public static RoomResponse toRoomResponse(Room room, Quiz quiz) {
44+
return new RoomResponse(
45+
room.getId(),
46+
room.getRoomSetting().roomName(),
47+
room.getRoomSetting().maxUserCount(),
48+
room.getPlayerSessionMap().size(),
49+
room.getRoomSetting().locked(),
50+
room.getState().name(),
51+
quiz.getTitle(),
52+
quiz.getDescription(),
53+
quiz.getCreator().getNickname(),
54+
quiz.getQuestions().size(),
55+
quiz.getThumbnailUrl());
56+
}
4057
}

backend/src/main/java/io/f1/backend/domain/game/store/RoomRepository.java

Lines changed: 4 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -3,8 +3,12 @@
33
import io.f1.backend.domain.game.model.Room;
44
import java.util.Optional;
55

6+
import java.util.List;
7+
68
public interface RoomRepository {
79
void saveRoom(Room room);
810

911
Optional<Room> findRoom(Long roomId);
12+
13+
List<Room> findAll();
1014
}

backend/src/main/java/io/f1/backend/domain/game/store/RoomRepositoryImpl.java

Lines changed: 7 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -5,6 +5,8 @@
55
import java.util.Optional;
66
import org.springframework.stereotype.Repository;
77

8+
import java.util.ArrayList;
9+
import java.util.List;
810
import java.util.Map;
911
import java.util.concurrent.ConcurrentHashMap;
1012

@@ -23,6 +25,11 @@ public Optional<Room> findRoom(Long roomId) {
2325
return Optional.ofNullable(roomMap.get(roomId));
2426
}
2527

28+
@Override
29+
public List<Room> findAll() {
30+
return new ArrayList<>(roomMap.values());
31+
}
32+
2633
// 테스트 전용 메소드
2734
public Room getRoomForTest(Long roomId) {
2835
return roomMap.get(roomId);

backend/src/main/java/io/f1/backend/domain/quiz/entity/Quiz.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -16,9 +16,14 @@
1616
import jakarta.persistence.ManyToOne;
1717
import jakarta.persistence.OneToMany;
1818

19+
import lombok.Getter;
20+
import lombok.Setter;
21+
1922
import java.util.ArrayList;
2023
import java.util.List;
2124

25+
@Getter
26+
@Setter // quizService의 퀴즈 조회 메서드 구현 시까지 임시 사용
2227
@Entity
2328
public class Quiz extends BaseEntity {
2429

backend/src/main/java/io/f1/backend/domain/user/entity/User.java

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -12,8 +12,13 @@
1212
import jakarta.persistence.OneToOne;
1313
import jakarta.persistence.Table;
1414

15+
import lombok.Getter;
16+
import lombok.Setter;
17+
1518
import java.time.LocalDateTime;
1619

20+
@Getter
21+
@Setter // quizService의 퀴즈 조회 메서드 구현 시까지 임시 사용
1722
@Entity
1823
@Table(name = "`user`")
1924
public class User extends BaseEntity {

backend/src/test/java/io/f1/backend/domain/game/store/RoomRepositoryTests.java

Lines changed: 44 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -13,6 +13,7 @@
1313
import org.junit.jupiter.api.Test;
1414

1515
import java.util.HashMap;
16+
import java.util.List;
1617
import java.util.Map;
1718

1819
class RoomRepositoryTests {
@@ -61,4 +62,47 @@ void saveRoom_test() {
6162
assertThat(savedRoom.getRoomSetting().locked()).isEqualTo(request.locked());
6263
assertThat(savedRoom.getRoomSetting().password()).isEqualTo(request.password());
6364
}
65+
66+
@Test
67+
@DisplayName("게임 방 전체 조회 테스트")
68+
void findAll_test() throws Exception {
69+
70+
// given: 테스트를 위한 방 2개 생성 및 저장
71+
RoomCreateRequest request1 = new RoomCreateRequest("방이름_1", 3, "password1", true);
72+
RoomCreateRequest request2 = new RoomCreateRequest("방이름_2", 5, "", false);
73+
74+
Player host1 = new Player(1L, "방장 1");
75+
Player host2 = new Player(2L, "호스트2");
76+
77+
GameSetting gameSetting = new GameSetting(1L, 10, 60);
78+
79+
RoomSetting roomSetting1 =
80+
new RoomSetting(
81+
request1.roomName(),
82+
request1.maxUserCount(),
83+
request1.locked(),
84+
request1.password());
85+
RoomSetting roomSetting2 =
86+
new RoomSetting(
87+
request2.roomName(),
88+
request2.maxUserCount(),
89+
request2.locked(),
90+
request2.password());
91+
92+
Room room1 = new Room(1L, roomSetting1, gameSetting, host1);
93+
Room room2 = new Room(2L, roomSetting2, gameSetting, host2);
94+
95+
roomRepository.saveRoom(room1);
96+
roomRepository.saveRoom(room2);
97+
98+
// when: 방 전체 조회 메서드로 전체 방 리스트 조회
99+
List<Room> allRooms = roomRepository.findAll();
100+
101+
// then: 저장한 방 2개가 모두 조회되어야하고
102+
assertThat(allRooms).hasSize(2);
103+
assertThat(allRooms).extracting("id").containsExactlyInAnyOrder(1L, 2L);
104+
assertThat(allRooms)
105+
.extracting(room -> room.getRoomSetting().roomName())
106+
.containsExactlyInAnyOrder("방이름_1", "방이름_2");
107+
}
64108
}

0 commit comments

Comments
 (0)