Skip to content

Commit 2d3c46d

Browse files
authored
✨ feat: 게임 방 생성 구현
* ✨ feat: 게임 방 생성 구현 * ✨ feat: repository, service 책임 분리, mapper추가 * chore: Java 스타일 수정 * ♻️ 리뷰 반영 수정 * chore: Java 스타일 수정 * 🩹 컨트롤러 import 추가 * chore: Java 스타일 수정 --------- Co-authored-by: github-actions <>
1 parent 18c2771 commit 2d3c46d

File tree

18 files changed

+275
-53
lines changed

18 files changed

+275
-53
lines changed

backend/src/main/java/io/f1/backend/domain/game/Player.java

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

backend/src/main/java/io/f1/backend/domain/game/Room.java

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

backend/src/main/java/io/f1/backend/domain/game/RoomManager.java

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

backend/src/main/java/io/f1/backend/domain/game/RoomSetting.java

Lines changed: 0 additions & 3 deletions
This file was deleted.
Lines changed: 38 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,38 @@
1+
package io.f1.backend.domain.game.api;
2+
3+
import io.f1.backend.domain.game.app.RoomService;
4+
import io.f1.backend.domain.game.dto.request.RoomCreateRequest;
5+
import io.f1.backend.domain.game.dto.response.RoomCreateResponse;
6+
7+
import jakarta.validation.Valid;
8+
9+
import lombok.RequiredArgsConstructor;
10+
11+
import org.springframework.http.HttpStatus;
12+
import org.springframework.web.bind.annotation.PostMapping;
13+
import org.springframework.web.bind.annotation.RequestBody;
14+
import org.springframework.web.bind.annotation.RequestMapping;
15+
import org.springframework.web.bind.annotation.ResponseStatus;
16+
import org.springframework.web.bind.annotation.RestController;
17+
18+
import java.util.HashMap;
19+
import java.util.Map;
20+
21+
@RestController
22+
@RequestMapping("/rooms")
23+
@RequiredArgsConstructor
24+
public class RoomController {
25+
26+
private final RoomService roomService;
27+
28+
@PostMapping
29+
@ResponseStatus(HttpStatus.CREATED)
30+
public RoomCreateResponse saveRoom(@RequestBody @Valid RoomCreateRequest request) {
31+
32+
Map<String, Object> loginUser = new HashMap<>();
33+
loginUser.put("id", 1L);
34+
loginUser.put("nickname", "빵야빵야");
35+
36+
return roomService.saveRoom(request, loginUser);
37+
}
38+
}
Lines changed: 41 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,41 @@
1+
package io.f1.backend.domain.game.app;
2+
3+
import static io.f1.backend.domain.game.mapper.RoomMapper.toRoomSetting;
4+
5+
import io.f1.backend.domain.game.dto.request.RoomCreateRequest;
6+
import io.f1.backend.domain.game.dto.response.RoomCreateResponse;
7+
import io.f1.backend.domain.game.model.GameSetting;
8+
import io.f1.backend.domain.game.model.Player;
9+
import io.f1.backend.domain.game.model.Room;
10+
import io.f1.backend.domain.game.model.RoomSetting;
11+
import io.f1.backend.domain.game.store.RoomRepository;
12+
13+
import lombok.RequiredArgsConstructor;
14+
15+
import org.springframework.stereotype.Service;
16+
17+
import java.util.Map;
18+
import java.util.concurrent.atomic.AtomicLong;
19+
20+
@Service
21+
@RequiredArgsConstructor
22+
public class RoomService {
23+
24+
private final RoomRepository roomRepository;
25+
private final AtomicLong roomIdGenerator = new AtomicLong(0);
26+
27+
public RoomCreateResponse saveRoom(RoomCreateRequest request, Map<String, Object> loginUser) {
28+
29+
// todo 제일 작은 index quizId 가져와서 gameSetting(round 설정)
30+
GameSetting gameSetting = new GameSetting(1L, 10, 60);
31+
// todo security에서 가져오는걸로 변경
32+
Player host = new Player((Long) loginUser.get("id"), loginUser.get("nickname").toString());
33+
RoomSetting roomSetting = toRoomSetting(request);
34+
35+
Long newId = roomIdGenerator.incrementAndGet();
36+
37+
roomRepository.saveRoom(new Room(newId, roomSetting, gameSetting, host));
38+
39+
return new RoomCreateResponse(newId);
40+
}
41+
}
Lines changed: 15 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,15 @@
1+
package io.f1.backend.domain.game.dto.request;
2+
3+
import jakarta.validation.constraints.Max;
4+
import jakarta.validation.constraints.Min;
5+
import jakarta.validation.constraints.NotBlank;
6+
import jakarta.validation.constraints.NotNull;
7+
8+
public record RoomCreateRequest(
9+
@NotBlank(message = "방 제목은 필수입니다.") String roomName,
10+
@NotNull(message = "인원 수 입력은 필수입니다.")
11+
@Min(value = 2, message = "방 인원 수는 최소 2명입니다.")
12+
@Max(value = 8, message = "방 인원 수는 최대 8명 입니다.")
13+
Integer maxUserCount,
14+
@NotNull String password,
15+
@NotNull boolean locked) {}
Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,3 @@
1+
package io.f1.backend.domain.game.dto.response;
2+
3+
public record RoomCreateResponse(Long roomId) {}
Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,12 @@
1+
package io.f1.backend.domain.game.mapper;
2+
3+
import io.f1.backend.domain.game.dto.request.RoomCreateRequest;
4+
import io.f1.backend.domain.game.model.RoomSetting;
5+
6+
public class RoomMapper {
7+
8+
public static RoomSetting toRoomSetting(RoomCreateRequest request) {
9+
return new RoomSetting(
10+
request.roomName(), request.maxUserCount(), request.locked(), request.password());
11+
}
12+
}

backend/src/main/java/io/f1/backend/domain/game/ConnectionState.java renamed to backend/src/main/java/io/f1/backend/domain/game/model/ConnectionState.java

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
package io.f1.backend.domain.game;
1+
package io.f1.backend.domain.game.model;
22

33
public enum ConnectionState {
44
DISCONNECTED,

0 commit comments

Comments
 (0)