Skip to content

Commit

Permalink
Chore: 불필요한 함수 삭제 및 주석 수정
Browse files Browse the repository at this point in the history
  • Loading branch information
suhyun113 committed Nov 27, 2024
1 parent 7ca2f66 commit eeaf036
Show file tree
Hide file tree
Showing 2 changed files with 12 additions and 105 deletions.
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,9 @@ public interface StageProgressRepository extends JpaRepository<StageProgressEnti
// 특정 세션의 스테이지 진행 상태 조회
List<StageProgressEntity> findBySessionId(String sessionId);

// 특정 세션과 스테이지 ID로 엔티티 찾기
Optional<StageProgressEntity> 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<StageProgressEntity> findLatestBySessionId(@Param("sessionId") String sessionId);
}

Original file line number Diff line number Diff line change
Expand Up @@ -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 유효성 검사
Expand All @@ -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
Expand Down

0 comments on commit eeaf036

Please sign in to comment.