Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
37 changes: 35 additions & 2 deletions src/main/java/umc7th/bulk/record/service/RecordServiceImpl.java
Original file line number Diff line number Diff line change
Expand Up @@ -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<StageRecord> 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명 이상이 기록하지 않았으므로 기존 스테이지 유지.");
}
}
}

Expand Down
9 changes: 7 additions & 2 deletions src/main/java/umc7th/bulk/stageRecord/entity/StageRecord.java
Original file line number Diff line number Diff line change
Expand Up @@ -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;
Expand All @@ -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;
}

}
Original file line number Diff line number Diff line change
@@ -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<StageRecord, Long> {
List<StageRecord> findByGroupGroupIdOrderByStageNumberAsc(Long groupId);

Optional<StageRecord> 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<StageRecord> findLatestStageRecordsForAllGroups();
}
Original file line number Diff line number Diff line change
Expand Up @@ -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();
Expand All @@ -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();
Expand Down