diff --git a/src/main/java/kz/konturai/parser/controller/TargetingCampaignController.java b/src/main/java/kz/konturai/parser/controller/TargetingCampaignController.java index 334761c..b56a500 100644 --- a/src/main/java/kz/konturai/parser/controller/TargetingCampaignController.java +++ b/src/main/java/kz/konturai/parser/controller/TargetingCampaignController.java @@ -13,6 +13,7 @@ import org.springframework.util.StringUtils; import java.util.List; import java.util.Map; +import java.util.Optional; @RestController @RequestMapping("/api/marketing/targeting") @@ -205,10 +206,22 @@ public class TargetingCampaignController { @RequestHeader(value = "Authorization", required = false) String authHeader, @PathVariable String id) { String userId = resolveUserId(userIdHeader, authHeader); - campaignService.getCampaignById(id, userId); // проверка прав - return predictionService.getLatest(id) - .map(ResponseEntity::ok) - .orElse(ResponseEntity.notFound().build()); + // Проверяем существование кампании и права доступа + TargetingCampaign campaign = campaignService.getCampaignById(id, userId); + + Optional predictionOpt = predictionService.getLatest(id); + if (predictionOpt.isPresent()) { + return ResponseEntity.ok(predictionOpt.get()); + } + + // Если предсказания еще нет — запускаем генерацию автоматически + log.info("[Targeting] Prediction missing for campaign {}, triggering auto-generate", id); + predictionService.generateAsync(campaign); + + return ResponseEntity.accepted().body(Map.of( + "status", "PROCESSING", + "message", "Предсказание еще не готово и было запущено автоматически. Попробуйте через 5-10 секунд." + )); } @PostMapping("/campaigns/{id}/predict")