diff --git a/backend-java/src/main/java/com/tasteby/controller/AdminVideoRelevanceController.java b/backend-java/src/main/java/com/tasteby/controller/AdminVideoRelevanceController.java index 8349ef6..37ca341 100644 --- a/backend-java/src/main/java/com/tasteby/controller/AdminVideoRelevanceController.java +++ b/backend-java/src/main/java/com/tasteby/controller/AdminVideoRelevanceController.java @@ -40,9 +40,11 @@ public class AdminVideoRelevanceController { @PostMapping("/all") public Map verifyAll(@RequestParam(defaultValue = "10") int batchSize) { var admin = AuthUtil.requireAdmin(); - log.info("[ADMIN] {} triggered video-relevance verifyAll(batchSize={})", admin.getSubject(), batchSize); - int processed = relevanceService.verifyAll(batchSize); - return Map.of("processed", processed); + int pending = restaurantService.countUnevaluatedLinks(); + log.info("[ADMIN] {} triggered video-relevance verifyAllAsync (batchSize={}, pending={})", admin.getSubject(), batchSize, pending); + // 비동기 트리거 — HTTP request는 즉시 응답. 진행은 /pending 폴링으로 확인. + relevanceService.verifyAllAsync(batchSize); + return Map.of("started", true, "pending", pending); } @PostMapping("/{linkId}/evaluate") diff --git a/backend-java/src/main/java/com/tasteby/service/VideoRelevanceService.java b/backend-java/src/main/java/com/tasteby/service/VideoRelevanceService.java index 3893e4f..e7e935e 100644 --- a/backend-java/src/main/java/com/tasteby/service/VideoRelevanceService.java +++ b/backend-java/src/main/java/com/tasteby/service/VideoRelevanceService.java @@ -63,6 +63,16 @@ public class VideoRelevanceService { restaurantService.updateLinkRelevance(linkId, result.relevance(), truncate(result.reason(), 120)); } + @Async + public void verifyAllAsync(int batchSize) { + try { + int n = verifyAll(batchSize); + log.info("[VideoRelevance] backfill done: {} processed", n); + } catch (Exception e) { + log.warn("verifyAllAsync failed: {}", e.getMessage()); + } + } + public int verifyAll(int batchSize) { int total = 0; List> batch;