Skip to content

Commit fc74ff8

Browse files
authored
Merge pull request #338 from HaRu-Developers/refactor/#336-mood-tracker-retry
refactor/#336: 설문 마감일시에 실패시 retry 전략
2 parents 2beaed5 + 76fb333 commit fc74ff8

3 files changed

Lines changed: 22 additions & 2 deletions

File tree

src/main/java/com/haru/api/domain/moodTracker/controller/MoodTrackerController.java

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -255,7 +255,7 @@ public ApiResponse<MoodTrackerResponseDTO.ReportDownLoadLinkResponse> downloadLi
255255

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

275275
@PostMapping("/{mood-tracker-hashed-Id}/report-file-thumbnail-test")
276276
@Operation(
277-
summary = "분위기 트래커 설문 리포트, 파일, 썸네일 즉시 생성 테스트 API",
277+
summary = "분위기 트래커 설문 리포트, 파일, 썸네일 즉시 생성 테스트 API + redis에서 제외하여 마감일시에 중복 생성 불가",
278278
description = "# [v1.0 (2025-08-14)](https://www.notion.so/24f5da7802c58019a1f7d9c8e882226e) 해당 ID의 분위기 트래커 설문 리포트를 즉시 생성합니다."
279279
)
280280
@Parameters({

src/main/java/com/haru/api/domain/moodTracker/service/MoodTrackerCommandServiceImpl.java

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -19,6 +19,7 @@
1919
import com.haru.api.global.apiPayload.code.status.ErrorStatus;
2020
import com.haru.api.global.apiPayload.exception.handler.*;
2121
import com.haru.api.global.util.HashIdUtil;
22+
import com.haru.api.infra.redis.RedisReportConsumer;
2223
import com.haru.api.infra.redis.RedisReportProducer;
2324
import lombok.RequiredArgsConstructor;
2425
import lombok.extern.slf4j.Slf4j;
@@ -52,6 +53,7 @@ public class MoodTrackerCommandServiceImpl implements MoodTrackerCommandService
5253

5354
private final MoodTrackerReportService moodTrackerReportService;
5455
private final RedisReportProducer redisReportProducer;
56+
private final RedisReportConsumer redisReportConsumer;
5557

5658
private final HashIdUtil hashIdUtil;
5759

@@ -318,6 +320,10 @@ public void generateReportTest(
318320
public void generateReportFileAndThumbnailTest(
319321
MoodTracker moodTracker
320322
) {
323+
// 중복 처리 제외
324+
redisReportConsumer.removeFromQueue(moodTracker.getId());
325+
326+
// 즉시 생성
321327
moodTrackerReportService.generateAndUploadReportFileAndThumbnail(moodTracker.getId());
322328
}
323329
}

src/main/java/com/haru/api/infra/redis/RedisReportConsumer.java

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -44,4 +44,18 @@ public void pollQueueEvery30Minutes() {
4444
}
4545
}
4646
}
47+
48+
@Transactional
49+
public void removeFromQueue(Long moodTrackerId) {
50+
try {
51+
Long removed = redisTemplate.opsForZSet().remove(QUEUE_KEY, moodTrackerId.toString());
52+
if (removed != null && removed > 0) {
53+
log.info("즉시 생성 API 호출로 큐에서 제거됨: {}", moodTrackerId);
54+
} else {
55+
log.info("큐에 존재하지 않아 제거할 항목 없음: {}", moodTrackerId);
56+
}
57+
} catch (Exception e) {
58+
log.error("큐 제거 실패: {}", moodTrackerId, e);
59+
}
60+
}
4761
}

0 commit comments

Comments
 (0)