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
Original file line number Diff line number Diff line change
Expand Up @@ -255,7 +255,7 @@ public ApiResponse<MoodTrackerResponseDTO.ReportDownLoadLinkResponse> downloadLi

@PostMapping("/{mood-tracker-hashed-Id}/report-test")
@Operation(
summary = "분위기 트래커 설문 리포트 즉시 생성 테스트 API",
summary = "분위기 트래커 설문 리포트 즉시 생성 API",
description = "# [v1.0 (2025-07-26)](https://www.notion.so/23f5da7802c58080b4a5e6d24b47d924) 해당 ID의 분위기 트래커 설문 리포트를 즉시 생성합니다."
)
@Parameters({
Expand All @@ -274,7 +274,7 @@ public ApiResponse<Void> generateMoodTrackerReportTest (

@PostMapping("/{mood-tracker-hashed-Id}/report-file-thumbnail-test")
@Operation(
summary = "분위기 트래커 설문 리포트, 파일, 썸네일 즉시 생성 테스트 API",
summary = "분위기 트래커 설문 리포트, 파일, 썸네일 즉시 생성 테스트 API + redis에서 제외하여 마감일시에 중복 생성 불가",
description = "# [v1.0 (2025-08-14)](https://www.notion.so/24f5da7802c58019a1f7d9c8e882226e) 해당 ID의 분위기 트래커 설문 리포트를 즉시 생성합니다."
)
@Parameters({
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
import com.haru.api.global.apiPayload.code.status.ErrorStatus;
import com.haru.api.global.apiPayload.exception.handler.*;
import com.haru.api.global.util.HashIdUtil;
import com.haru.api.infra.redis.RedisReportConsumer;
import com.haru.api.infra.redis.RedisReportProducer;
import lombok.RequiredArgsConstructor;
import lombok.extern.slf4j.Slf4j;
Expand Down Expand Up @@ -52,6 +53,7 @@ public class MoodTrackerCommandServiceImpl implements MoodTrackerCommandService

private final MoodTrackerReportService moodTrackerReportService;
private final RedisReportProducer redisReportProducer;
private final RedisReportConsumer redisReportConsumer;

private final HashIdUtil hashIdUtil;

Expand Down Expand Up @@ -318,6 +320,10 @@ public void generateReportTest(
public void generateReportFileAndThumbnailTest(
MoodTracker moodTracker
) {
// 중복 처리 제외
redisReportConsumer.removeFromQueue(moodTracker.getId());

// 즉시 생성
moodTrackerReportService.generateAndUploadReportFileAndThumbnail(moodTracker.getId());
}
}
14 changes: 14 additions & 0 deletions src/main/java/com/haru/api/infra/redis/RedisReportConsumer.java
Original file line number Diff line number Diff line change
Expand Up @@ -44,4 +44,18 @@ public void pollQueueEvery30Minutes() {
}
}
}

@Transactional
public void removeFromQueue(Long moodTrackerId) {
try {
Long removed = redisTemplate.opsForZSet().remove(QUEUE_KEY, moodTrackerId.toString());
if (removed != null && removed > 0) {
log.info("즉시 생성 API 호출로 큐에서 제거됨: {}", moodTrackerId);
} else {
log.info("큐에 존재하지 않아 제거할 항목 없음: {}", moodTrackerId);
}
} catch (Exception e) {
log.error("큐 제거 실패: {}", moodTrackerId, e);
}
}
}