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] =?UTF-8?q?Chore:=20=EB=B6=88=ED=95=84=EC=9A=94=ED=95=9C?= =?UTF-8?q?=20=ED=95=A8=EC=88=98=20=EC=82=AD=EC=A0=9C=20=EB=B0=8F=20?= =?UTF-8?q?=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