From eeaf036b988447a4133708de65dd2a2b4a367922 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=88=98=ED=98=84?= Date: Thu, 28 Nov 2024 00:51:09 +0900 Subject: [PATCH 1/3] =?UTF-8?q?Chore:=20=EB=B6=88=ED=95=84=EC=9A=94?= =?UTF-8?q?=ED=95=9C=20=ED=95=A8=EC=88=98=20=EC=82=AD=EC=A0=9C=20=EB=B0=8F?= =?UTF-8?q?=20=EC=A3=BC=EC=84=9D=20=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Repository/StageProgressRepository.java | 7 -- .../Service/StageResetService.java | 110 ++---------------- 2 files changed, 12 insertions(+), 105 deletions(-) diff --git a/sever/src/main/java/com/example/rememberdokdo/Repository/StageProgressRepository.java b/sever/src/main/java/com/example/rememberdokdo/Repository/StageProgressRepository.java index f1c11b3..048cfd7 100644 --- a/sever/src/main/java/com/example/rememberdokdo/Repository/StageProgressRepository.java +++ b/sever/src/main/java/com/example/rememberdokdo/Repository/StageProgressRepository.java @@ -13,16 +13,9 @@ public interface StageProgressRepository extends JpaRepository findBySessionId(String sessionId); - // 특정 세션과 스테이지 ID로 엔티티 찾기 - Optional findBySessionIdAndStageId(String sessionId, int stageId); - // sessionId가 같은 모든 레코드 삭제하는 메서드 @Modifying @Query("DELETE FROM StageProgressEntity p WHERE p.sessionId = :sessionId") void deleteAllBySessionId(@Param("sessionId") String sessionId); - - // sessionId가 같은 진행 상황 중 가장 최신의 정보 찾기 - @Query("SELECT sp FROM StageProgressEntity sp WHERE sp.sessionId = :sessionId ORDER BY sp.progressId DESC LIMIT 1") - Optional findLatestBySessionId(@Param("sessionId") String sessionId); } diff --git a/sever/src/main/java/com/example/rememberdokdo/Service/StageResetService.java b/sever/src/main/java/com/example/rememberdokdo/Service/StageResetService.java index 917b7af..a5a19d3 100644 --- a/sever/src/main/java/com/example/rememberdokdo/Service/StageResetService.java +++ b/sever/src/main/java/com/example/rememberdokdo/Service/StageResetService.java @@ -23,22 +23,11 @@ public class StageResetService { private InventoryItemsRepository inventoryItemsRepository; - // 초기화(게임 오버, 클리어) 기능 + // 초기화 기능 @Transactional - public StageResetResponseDto resetStage(String sessionId, int stageId) { - validateSessionId(sessionId); - validateStageId(stageId); - - // Stage 4, 5, 6 처리 (공통 처리 로직) - if (stageId == 4 || stageId == 5 || stageId == 6) { - return progressStage456(sessionId); - } - // Stage 7 (퍼즐 게임) 처리 - else if (stageId == 7) { - return progressStage7(sessionId, stageId); - } - - throw new IllegalArgumentException("알 수 없는 스테이지 ID입니다."); + public StageResetResponseDto resetStage(String sessionId) { + validateSessionId(sessionId); // 세션 ID 유효성 검사 + return progressStage(sessionId); // 스테이지 처리(4,5,6,7 공통 처리 로직) } // 세션 ID 유효성 검사 @@ -48,105 +37,30 @@ private void validateSessionId(String sessionId) { } } - // 초기화 불가능한 스테이지 ID 검증 - private void validateStageId(int stageId) { - if (stageId == 1 || stageId == 2 || stageId == 3) { - throw new IllegalArgumentException("해당 스테이지는 초기화할 수 없습니다."); - } - } - - // stage 4,5,6 처리(남은 하트 수 기반) - private StageResetResponseDto progressStage456(String sessionId){ - // 새로운 Dto 생성 - StageResetResponseDto responseDto = new StageResetResponseDto(); - responseDto.setSessionId(sessionId); // sessionId에 따라 한 번 생성 - - InventoryEntity inventory = getInventoryBySessionId(sessionId); - StageProgressEntity progressEntity = getLatestStageProgress(sessionId); - - validateStageResetConditions(progressEntity); - - // 조건 충족 : 데이터 삭제 - deleteAllSessionData(sessionId, inventory.getInventoryId()); // 모든 관련 데이터 삭제 - - // 실패 메시지와 함께 새로운 진행 상태 저장 - progressEntity = resetStageProgress(sessionId, "하트를 모두 소진하여 방탈출에 실패하였습니다."); - - // 응답 Dto에 데이터 설정 - responseDto.setMessage("하트를 모두 소진하여 방탈출에 실패하였습니다."); - responseDto.setProgressId(progressEntity.getProgressId()); - - return responseDto; - } - - // 스테이지7(퍼즐 게임) 처리 - private StageResetResponseDto progressStage7(String sessionId, int stageId){ + // 스테이지 초기화 처리 + private StageResetResponseDto progressStage(String sessionId){ // 새로운 Dto 생성 StageResetResponseDto responseDto = new StageResetResponseDto(); responseDto.setSessionId(sessionId); // sessionId에 따라 한 번 생성 - InventoryEntity inventory = getInventoryBySessionId(sessionId); - StageProgressEntity stageProgress = getStageProgressBySessionAndStage(sessionId, stageId); + InventoryEntity inventory = getInventoryBySessionId(sessionId); // 인벤토리 조회 + StageProgressEntity progressEntity; // 엔티티 생성 + deleteAllSessionData(sessionId, inventory.getInventoryId()); // 데이터 삭제 - // 스테이지 7 진입 전 남은 하트 수 검증 - checkRemainingHearts(stageProgress.getRemainingHearts()); + progressEntity = resetStageProgress(sessionId, "게임이 종료되었습니다."); // 게임 종료 데이터 저장 + responseDto.setMessage("게임이 종료되었습니다."); // 새로운 Dto에 방탈출 게임 종료 메시지 추가 - StageProgressEntity progressEntity; - - // 조건 충족 : 데이터 삭제 - deleteAllSessionData(sessionId, inventory.getInventoryId()); - if (stageProgress.isCleared()) { - // 성공 데이터 저장 - progressEntity = resetStageProgress(sessionId, "퍼즐 게임을 클리어하여 방탈출에 성공하였습니다."); - // 새로운 Dto에 방탈출 성공 메시지 추가 - responseDto.setMessage("퍼즐 게임을 클리어하여 방탈출에 성공하였습니다."); - } else { - // 실패 데이터 저장 - progressEntity = resetStageProgress(sessionId, "퍼즐 게임을 시간 안에 클리어하지 못 해 방탈출에 실패하였습니다."); - // 새로운 Dto에 방탈출 실패 메시지 추가 - responseDto.setMessage("퍼즐 게임을 시간 안에 클리어하지 못 해 방탈출에 실패하였습니다."); - } responseDto.setProgressId(progressEntity.getProgressId()); return responseDto; } - // 남은 하트 수 확인 - private void checkRemainingHearts(int remainingHearts){ - if (remainingHearts <= 0) { - throw new IllegalArgumentException("남은 하트가 0개이므로 스테이지 7에 진입할 수 없습니다."); - } - } - // 인벤토리 조회 private InventoryEntity getInventoryBySessionId(String sessionId) { return inventoryRepository.findBySessionId(sessionId) .orElseThrow(() -> new IllegalArgumentException("인벤토리가 존재하지 않습니다.")); } - // 최신 스테이지 진행 상황 조회 - private StageProgressEntity getLatestStageProgress(String sessionId) { - return stageProgressRepository.findLatestBySessionId(sessionId) - .orElseThrow(() -> new IllegalArgumentException("스테이지 진행 정보가 존재하지 않습니다.")); - } - - // 특정 스테이지 진행 상황 조회 - private StageProgressEntity getStageProgressBySessionAndStage(String sessionId, int stageId) { - return stageProgressRepository.findBySessionIdAndStageId(sessionId, stageId) - .orElseThrow(() -> new IllegalArgumentException("유효하지 않은 스테이지 상태입니다. 세션 ID 또는 스테이지 ID를 확인해주세요.")); - } - - // 초기화 조건 검증 => 하트 수가 0개이고, isCleared가 false - private void validateStageResetConditions(StageProgressEntity progressEntity) { - if (progressEntity.getRemainingHearts() > 0) { - throw new IllegalArgumentException("하트가 남아있어 초기화할 수 없습니다."); - } - - if (progressEntity.isCleared()) { - throw new IllegalArgumentException("현재 스테이지가 클리어된 상태여서 초기화할 수 없습니다."); - } - } - - // 스테이지 4 진행 상황 초기화 + // 스테이지 진행 상황 초기화 private StageProgressEntity resetStageProgress(String sessionId, String message) { StageProgressEntity newProgress = new StageProgressEntity(); newProgress.setSessionId(sessionId); // 기존 세션 ID From 56c6de7ce9622844a12a1e134d2272fda751e933 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=88=98=ED=98=84?= Date: Thu, 28 Nov 2024 01:02:14 +0900 Subject: [PATCH 2/3] =?UTF-8?q?Chore:=20=EC=9E=98=EB=AA=BB=20=EC=82=AD?= =?UTF-8?q?=EC=A0=9C=ED=95=9C=20=EB=A9=94=EC=84=9C=EB=93=9C=20=EC=B6=94?= =?UTF-8?q?=EA=B0=80?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../rememberdokdo/Repository/StageProgressRepository.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/sever/src/main/java/com/example/rememberdokdo/Repository/StageProgressRepository.java b/sever/src/main/java/com/example/rememberdokdo/Repository/StageProgressRepository.java index 048cfd7..e8d23fa 100644 --- a/sever/src/main/java/com/example/rememberdokdo/Repository/StageProgressRepository.java +++ b/sever/src/main/java/com/example/rememberdokdo/Repository/StageProgressRepository.java @@ -13,6 +13,9 @@ public interface StageProgressRepository extends JpaRepository findBySessionId(String sessionId); + // 특정 세션과 스테이지 ID로 엔티티 찾기 + Optional findBySessionIdAndStageId(String sessionId, int stageId); + // sessionId가 같은 모든 레코드 삭제하는 메서드 @Modifying @Query("DELETE FROM StageProgressEntity p WHERE p.sessionId = :sessionId") From 74f59e5c81acb7651eb6b9392d7aafe1d3121906 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=EA=B9=80=EC=88=98=ED=98=84?= Date: Thu, 28 Nov 2024 01:05:40 +0900 Subject: [PATCH 3/3] =?UTF-8?q?Feat:=20=EC=8A=A4=ED=85=8C=EC=9D=B4?= =?UTF-8?q?=EC=A7=80=20=EC=B4=88=EA=B8=B0=ED=99=94=20=EA=B8=B0=EB=8A=A5=20?= =?UTF-8?q?=EC=BB=A8=ED=8A=B8=EB=A1=A4=EB=9F=AC=20=EB=B3=80=EA=B2=BD?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../Controller/StageController.java | 11 ---------- .../Controller/StageResetController.java | 21 +++++++++++++++++++ 2 files changed, 21 insertions(+), 11 deletions(-) create mode 100644 sever/src/main/java/com/example/rememberdokdo/Controller/StageResetController.java diff --git a/sever/src/main/java/com/example/rememberdokdo/Controller/StageController.java b/sever/src/main/java/com/example/rememberdokdo/Controller/StageController.java index 77ce259..618d172 100644 --- a/sever/src/main/java/com/example/rememberdokdo/Controller/StageController.java +++ b/sever/src/main/java/com/example/rememberdokdo/Controller/StageController.java @@ -16,8 +16,6 @@ public class StageController { @Autowired private StageService stageService; - @Autowired - private StageResetService stageResetService; // 특정 스테이지 접근 가능 여부 확인 @GetMapping("/{stageId}/access") @@ -55,15 +53,6 @@ public StageProgressResponseDto getStageStatus( @PathVariable int stageId, @RequestParam String sessionId ) { - return stageService.getStageStatus(sessionId, stageId); } - - // POST /stage/{stageId}/retry - @PostMapping("/{stageId}/reset") - public ResponseEntity resetStage( - @PathVariable int stageId, - @RequestParam String sessionId) { - return ResponseEntity.ok(stageResetService.resetStage(sessionId, stageId)); - } } \ No newline at end of file diff --git a/sever/src/main/java/com/example/rememberdokdo/Controller/StageResetController.java b/sever/src/main/java/com/example/rememberdokdo/Controller/StageResetController.java new file mode 100644 index 0000000..e50d3c0 --- /dev/null +++ b/sever/src/main/java/com/example/rememberdokdo/Controller/StageResetController.java @@ -0,0 +1,21 @@ +package com.example.rememberdokdo.Controller; + +import com.example.rememberdokdo.Dto.StageResetResponseDto; +import com.example.rememberdokdo.Service.StageResetService; +import org.springframework.beans.factory.annotation.Autowired; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.*; + +@RestController +@RequestMapping("/stage") +public class StageResetController { + @Autowired + private StageResetService stageResetService; + + // POST /stage/reset + @PostMapping("/reset") + public ResponseEntity resetStage( + @RequestParam String sessionId) { + return ResponseEntity.ok(stageResetService.resetStage(sessionId)); + } +}