diff --git a/src/main/java/kz/konturai/parser/repository/MarketingAnalysisV2Repository.java b/src/main/java/kz/konturai/parser/repository/MarketingAnalysisV2Repository.java index 0050124..1835856 100644 --- a/src/main/java/kz/konturai/parser/repository/MarketingAnalysisV2Repository.java +++ b/src/main/java/kz/konturai/parser/repository/MarketingAnalysisV2Repository.java @@ -16,4 +16,6 @@ public interface MarketingAnalysisV2Repository extends MongoRepository findByIdAndUserId(String id, String userId); Optional findByAnalysisId(String analysisId); + + List findByUserId(String userId); } diff --git a/src/main/java/kz/konturai/parser/service/MarketingAnalysisService.java b/src/main/java/kz/konturai/parser/service/MarketingAnalysisService.java index f8446b0..3ea204f 100644 --- a/src/main/java/kz/konturai/parser/service/MarketingAnalysisService.java +++ b/src/main/java/kz/konturai/parser/service/MarketingAnalysisService.java @@ -5491,9 +5491,57 @@ public class MarketingAnalysisService { public List getUserAnalyses(String userId) { logger.debug("Fetching analyses for userId: {}", userId); try { - List analyses = repository.findByUserIdOrderByCreatedAtDesc(userId); - logger.debug("Found {} analyses for userId: {}", analyses.size(), userId); - return analyses; + // 1. Получаем стандартные анализы (V1 и те, что были созданы через startAnalysis) + List v1Analyses = repository.findByUserIdOrderByCreatedAtDesc(userId); + + List v2Analyses = v2Repository.findByUserId(userId); + + List v2AsV1List = v2Analyses.stream() + // Фильтруем те V2, которые уже привязаны к V1 (чтобы не было дубликатов), + // если у вас есть логика связывания через analysisId + .filter(v2 -> v2.getAnalysisId() == null) + .map(v2 -> { + MarketingAnalysis ma = new MarketingAnalysis(); + // Маппинг полей из V2 в V1 + ma.setId(v2.getId()); // Используем ID документа V2 + ma.setUserId(v2.getUserId()); + ma.setProduct(v2.getProduct()); + ma.setBusinessNiche(v2.getBusinessNiche()); + ma.setGoal(v2.getGoal()); + ma.setRegion(v2.getRegion()); + ma.setTargetAudience(v2.getTargetAudience()); + ma.setDetailLevel(v2.getDetailLevel()); + ma.setAnalysisType(v2.getAnalysisType()); + + // V2 анализы, сохраненные через generateAndSaveAnalysisV2, считаются завершенными + ma.setStatus("completed"); + + // Важно: проставляем ссылку на самого себя или помечаем, что это V2 + ma.setV2AnalysisId(v2.getId()); + + // Время создания (если в V2Document нет createdAt, берем текущее или из ID) + // Лучше добавить поле createdAt в MarketingAnalysisV2Document + if (v2.getCreatedAt() != null) { + ma.setCreatedAt(v2.getCreatedAt()); + ma.setCompletedAt(v2.getCreatedAt()); + } else { + // Fallback, если времени нет + ma.setCreatedAt(LocalDateTime.now()); + } + + return ma; + }).toList(); + + List allAnalyses = new ArrayList<>(v1Analyses); + allAnalyses.addAll(v2AsV1List); + + allAnalyses.sort(Comparator.comparing(MarketingAnalysis::getCreatedAt, Comparator.nullsLast(Comparator.reverseOrder()))); + + logger.debug("Found {} total analyses (V1: {}, V2: {}) for userId: {}", + allAnalyses.size(), v1Analyses.size(), v2AsV1List.size(), userId); + + return allAnalyses; + } catch (Exception e) { logger.error("Error fetching analyses for userId {}: {}", userId, e.getMessage(), e); throw e;