Skip to content

Commit a9a3a55

Browse files
Merge branch 'dev' into feat/4
2 parents 14b7a63 + da50e5d commit a9a3a55

File tree

10 files changed

+135
-1
lines changed

10 files changed

+135
-1
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
@@ -3,12 +3,14 @@
33
import io.f1.backend.domain.game.app.RoomService;
44
import io.f1.backend.domain.game.dto.request.RoomCreateRequest;
55
import io.f1.backend.domain.game.dto.response.RoomCreateResponse;
6+
import io.f1.backend.domain.game.dto.response.RoomListResponse;
67

78
import jakarta.validation.Valid;
89

910
import lombok.RequiredArgsConstructor;
1011

1112
import org.springframework.http.HttpStatus;
13+
import org.springframework.web.bind.annotation.GetMapping;
1214
import org.springframework.web.bind.annotation.PostMapping;
1315
import org.springframework.web.bind.annotation.RequestBody;
1416
import org.springframework.web.bind.annotation.RequestMapping;
@@ -35,4 +37,9 @@ public RoomCreateResponse saveRoom(@RequestBody @Valid RoomCreateRequest request
3537

3638
return roomService.saveRoom(request, loginUser);
3739
}
40+
41+
@GetMapping
42+
public RoomListResponse getAllRooms() {
43+
return roomService.getAllRooms();
44+
}
3845
}

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

Lines changed: 29 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,24 @@
11
package io.f1.backend.domain.game.app;
22

3-
import static io.f1.backend.domain.game.mapper.RoomMapper.toRoomSetting;
3+
import static io.f1.backend.domain.game.mapper.RoomMapper.*;
44

55
import io.f1.backend.domain.game.dto.request.RoomCreateRequest;
66
import io.f1.backend.domain.game.dto.response.RoomCreateResponse;
7+
import io.f1.backend.domain.game.dto.response.RoomListResponse;
8+
import io.f1.backend.domain.game.dto.response.RoomResponse;
79
import io.f1.backend.domain.game.model.GameSetting;
810
import io.f1.backend.domain.game.model.Player;
911
import io.f1.backend.domain.game.model.Room;
1012
import io.f1.backend.domain.game.model.RoomSetting;
1113
import io.f1.backend.domain.game.store.RoomRepository;
14+
import io.f1.backend.domain.quiz.entity.Quiz;
15+
import io.f1.backend.domain.user.entity.User;
1216

1317
import lombok.RequiredArgsConstructor;
1418

1519
import org.springframework.stereotype.Service;
1620

21+
import java.util.List;
1722
import java.util.Map;
1823
import java.util.concurrent.atomic.AtomicLong;
1924

@@ -38,4 +43,27 @@ public RoomCreateResponse saveRoom(RoomCreateRequest request, Map<String, Object
3843

3944
return new RoomCreateResponse(newId);
4045
}
46+
47+
// todo quizService에서 퀴즈 조회 메서드로 변경
48+
public RoomListResponse getAllRooms() {
49+
List<Room> rooms = roomRepository.findAll();
50+
List<RoomResponse> roomResponses =
51+
rooms.stream()
52+
.map(
53+
room -> {
54+
User user = new User(); // 임시 유저 객체
55+
user.setNickname("임시 유저 닉네임");
56+
57+
Quiz quiz = new Quiz(); // 임시 퀴즈 객체
58+
quiz.setTitle("임시 퀴즈 제목");
59+
quiz.setDescription("임시 퀴즈 설명");
60+
quiz.setThumbnailUrl("임시 이미지");
61+
quiz.setQuestions(List.of());
62+
quiz.setCreator(user);
63+
64+
return toRoomResponse(room, quiz);
65+
})
66+
.toList();
67+
return new RoomListResponse(roomResponses);
68+
}
4169
}
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) {}
Lines changed: 18 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,12 +1,30 @@
11
package io.f1.backend.domain.game.mapper;
22

33
import io.f1.backend.domain.game.dto.request.RoomCreateRequest;
4+
import io.f1.backend.domain.game.dto.response.RoomResponse;
5+
import io.f1.backend.domain.game.model.Room;
46
import io.f1.backend.domain.game.model.RoomSetting;
7+
import io.f1.backend.domain.quiz.entity.Quiz;
58

69
public class RoomMapper {
710

811
public static RoomSetting toRoomSetting(RoomCreateRequest request) {
912
return new RoomSetting(
1013
request.roomName(), request.maxUserCount(), request.locked(), request.password());
1114
}
15+
16+
public static RoomResponse toRoomResponse(Room room, Quiz quiz) {
17+
return new RoomResponse(
18+
room.getId(),
19+
room.getRoomSetting().roomName(),
20+
room.getRoomSetting().maxUserCount(),
21+
room.getPlayerSessionMap().size(),
22+
room.getRoomSetting().locked(),
23+
room.getState().name(),
24+
quiz.getTitle(),
25+
quiz.getDescription(),
26+
quiz.getCreator().getNickname(),
27+
quiz.getQuestions().size(),
28+
quiz.getThumbnailUrl());
29+
}
1230
}

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

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2,6 +2,11 @@
22

33
import io.f1.backend.domain.game.model.Room;
44

5+
import java.util.List;
6+
57
public interface RoomRepository {
8+
69
void saveRoom(Room room);
10+
11+
List<Room> findAll();
712
}

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
@@ -4,6 +4,8 @@
44

55
import org.springframework.stereotype.Repository;
66

7+
import java.util.ArrayList;
8+
import java.util.List;
79
import java.util.Map;
810
import java.util.concurrent.ConcurrentHashMap;
911

@@ -17,6 +19,11 @@ public void saveRoom(Room room) {
1719
roomMap.put(room.getId(), room);
1820
}
1921

22+
@Override
23+
public List<Room> findAll() {
24+
return new ArrayList<>(roomMap.values());
25+
}
26+
2027
// 테스트 전용 메소드
2128
public Room getRoomForTest(Long roomId) {
2229
return roomMap.get(roomId);

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

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,10 +19,13 @@
1919
import lombok.AccessLevel;
2020
import lombok.Getter;
2121
import lombok.NoArgsConstructor;
22+
import lombok.Setter;
2223

2324
import java.util.ArrayList;
2425
import java.util.List;
2526

27+
@Getter
28+
@Setter // quizService의 퀴즈 조회 메서드 구현 시까지 임시 사용
2629
@Entity
2730
@Getter
2831
@NoArgsConstructor(access = AccessLevel.PROTECTED)

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

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

1515
import lombok.Getter;
16+
import lombok.Setter;
1617

1718
import java.time.LocalDateTime;
1819

20+
@Getter
21+
@Setter // quizService의 퀴즈 조회 메서드 구현 시까지 임시 사용
1922
@Entity
2023
@Getter
2124
@Table(name = "`user`")

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)