From 625ff642c9dc0dfdcf936382e51b3a3b08da2720 Mon Sep 17 00:00:00 2001 From: eunsxx <88652027+eunsxx@users.noreply.github.com> Date: Wed, 19 Feb 2025 23:51:13 +0900 Subject: [PATCH] =?UTF-8?q?[FIX]=20record=20=EA=B8=B0=EB=A1=9D=20=EC=8B=9C?= =?UTF-8?q?=20=EA=B7=B8=EB=A3=B9=EC=97=90=20=ED=95=84=EC=9A=94=ED=95=9C=20?= =?UTF-8?q?=EC=A0=95=EB=B3=B4=20=EC=97=85=EB=8D=B0=EC=9D=B4=ED=8A=B8=20?= =?UTF-8?q?=EC=88=98=EC=A0=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../record/service/RecordServiceImpl.java | 37 ++++++++++++++++++- .../bulk/stageRecord/entity/StageRecord.java | 9 ++++- .../repository/StageRecordRepository.java | 6 +++ .../command/UserCommandServiceImpl.java | 5 ++- 4 files changed, 51 insertions(+), 6 deletions(-) diff --git a/src/main/java/umc7th/bulk/record/service/RecordServiceImpl.java b/src/main/java/umc7th/bulk/record/service/RecordServiceImpl.java index f11e1a4..efaa6fd 100644 --- a/src/main/java/umc7th/bulk/record/service/RecordServiceImpl.java +++ b/src/main/java/umc7th/bulk/record/service/RecordServiceImpl.java @@ -393,8 +393,41 @@ public void checkAndAdvanceStage(Group group) { // 현재 그룹에서 recordComplete = true인 유저 수 확인 int recordedCount = userRepository.countByGroupAndRecordCompleteTrue(group); - if (recordedCount >= 5) { - advanceStage(group); + StageRecord currentStageRecord = stageRecordRepository + .findTopByGroupOrderByStageNumberDesc(group) + .orElseThrow(() -> new CustomException(GeneralErrorCode.GROUP_NOT_FOUND_404)); + + currentStageRecord.increaseRecordedUsers(); + stageRecordRepository.save(currentStageRecord); + + LocalDate stageCreationDate = currentStageRecord.getCreatedAt().toLocalDate(); // 스테이지 생성일 가져오기 + LocalDate today = LocalDate.now(); + + checkAndCreateNewStageIfNeeded(group, stageCreationDate, recordedCount); + } + + private void checkAndCreateNewStageIfNeeded(Group group, LocalDate stageCreationDate, int recordedCount) { + LocalDate today = LocalDate.now(); + + if (!stageCreationDate.equals(today)) { + log.info("✅ 새로운 날이므로 모든 팀의 recordedUsers 초기화 진행..."); + + // **모든 그룹의 최신 스테이지 가져와서 recordedUsers 초기화** + List latestStageRecords = stageRecordRepository.findLatestStageRecordsForAllGroups(); + + for (StageRecord stageRecord : latestStageRecords) { + stageRecord.resetRecordedUsers(); + } + + stageRecordRepository.saveAll(latestStageRecords); + + // 🔹 기록 완료 인원이 5명 이상이면 새로운 스테이지 생성 + if (recordedCount >= 5) { + log.info("🔥 5명 이상 기록 완료 → 새로운 스테이지 생성!"); + advanceStage(group); + } else { + log.info("⏳ 5명 이상이 기록하지 않았으므로 기존 스테이지 유지."); + } } } diff --git a/src/main/java/umc7th/bulk/stageRecord/entity/StageRecord.java b/src/main/java/umc7th/bulk/stageRecord/entity/StageRecord.java index c4bd3c5..731492f 100644 --- a/src/main/java/umc7th/bulk/stageRecord/entity/StageRecord.java +++ b/src/main/java/umc7th/bulk/stageRecord/entity/StageRecord.java @@ -26,7 +26,7 @@ public class StageRecord extends BaseTimeEntity { private int stageNumber; @Column(nullable = false) - private int totalUsers; + private int totalUsers = 0; @Column(nullable = false) private int recordedUsers; @@ -50,11 +50,16 @@ public void increaseRecordedUsers() { this.recordedUsers++; } - public void increaseTotalUsers() { this.totalUsers++; } + public void increaseTotalUsers() { this.totalUsers = this.totalUsers + 1; } // 스테이지 완료 처리 로직 public void completeStage() { this.isCompleted = true; this.completedAt = LocalDateTime.now(); } + + public void resetRecordedUsers() { + this.recordedUsers = 0; + } + } diff --git a/src/main/java/umc7th/bulk/stageRecord/repository/StageRecordRepository.java b/src/main/java/umc7th/bulk/stageRecord/repository/StageRecordRepository.java index b3a5ff2..8b393e5 100644 --- a/src/main/java/umc7th/bulk/stageRecord/repository/StageRecordRepository.java +++ b/src/main/java/umc7th/bulk/stageRecord/repository/StageRecordRepository.java @@ -1,14 +1,20 @@ package umc7th.bulk.stageRecord.repository; import org.springframework.data.jpa.repository.JpaRepository; +import org.springframework.data.jpa.repository.Query; +import org.springframework.stereotype.Repository; import umc7th.bulk.group.entity.Group; import umc7th.bulk.stageRecord.entity.StageRecord; import java.util.List; import java.util.Optional; +@Repository public interface StageRecordRepository extends JpaRepository { List findByGroupGroupIdOrderByStageNumberAsc(Long groupId); Optional findTopByGroupOrderByStageNumberDesc(Group group); + + @Query("SELECT sr FROM StageRecord sr WHERE sr.stageNumber = (SELECT MAX(s.stageNumber) FROM StageRecord s WHERE s.group = sr.group)") + List findLatestStageRecordsForAllGroups(); } diff --git a/src/main/java/umc7th/bulk/user/service/command/UserCommandServiceImpl.java b/src/main/java/umc7th/bulk/user/service/command/UserCommandServiceImpl.java index cf0c605..b797d63 100644 --- a/src/main/java/umc7th/bulk/user/service/command/UserCommandServiceImpl.java +++ b/src/main/java/umc7th/bulk/user/service/command/UserCommandServiceImpl.java @@ -77,7 +77,7 @@ public UserResponseDTO.UserTokenDTO signup(UserRequestDTO.SignupDTO dto) { StageRecord firstStage = StageRecord.builder() .group(newGroup) .stageNumber(1) - .totalUsers(1) + .totalUsers(0) .recordedUsers(0) .isCompleted(false) .build(); @@ -86,7 +86,8 @@ public UserResponseDTO.UserTokenDTO signup(UserRequestDTO.SignupDTO dto) { return newGroup; }); - if (!groupRepository.findGroupWithSpace().isPresent()) { // 기존 그룹인지 확인 + // 기존 그룹인지 확인 + if (group.getGroupId() != null) { // 기존 그룹이면 totalUsers 증가 StageRecord latestStage = stageRecordRepository.findTopByGroupOrderByStageNumberDesc(group) .orElseThrow(() -> new RuntimeException("StageRecord not found for existing group.")); latestStage.increaseTotalUsers();