target fix

This commit is contained in:
arys
2026-03-29 21:38:43 +05:00
parent e2786d53b0
commit e5cd104930
4 changed files with 15 additions and 7 deletions
@@ -10,7 +10,7 @@ import java.util.Optional;
@Repository
public interface MarketingStrategyRepository extends MongoRepository<MarketingStrategy, String> {
Optional<MarketingStrategy> findById(String id);
Optional<MarketingStrategy> findByAnalysisId(String analysisId);
Optional<MarketingStrategy> findFirstByAnalysisIdOrderByCreatedAtDesc(String analysisId);
List<MarketingStrategy> findByUserIdOrderByCreatedAtDesc(String userId);
List<MarketingStrategy> findByUserIdAndAnalysisId(String userId, String analysisId);
}
@@ -64,7 +64,7 @@ public class MarketingStrategyService {
throw new IllegalStateException("Анализ еще не завершен. Статус: " + analysisResult.getStatus());
}
Optional<MarketingStrategy> existingStrategy = repository.findByAnalysisId(analysisId);
Optional<MarketingStrategy> existingStrategy = repository.findFirstByAnalysisIdOrderByCreatedAtDesc(analysisId);
if (existingStrategy.isPresent()) {
logger.info("Стратегия для анализа {} уже существует: {}", analysisId, existingStrategy.get().getId());
return existingStrategy.get();
@@ -710,7 +710,7 @@ public class MarketingStrategyService {
}
public MarketingStrategyResponse getStrategyByAnalysisId(String analysisId) {
Optional<MarketingStrategy> optStrategy = repository.findByAnalysisId(analysisId);
Optional<MarketingStrategy> optStrategy = repository.findFirstByAnalysisIdOrderByCreatedAtDesc(analysisId);
if (optStrategy.isEmpty()) {
return null;
}
@@ -62,7 +62,7 @@ public class MarketingStrategyV3Service {
}
public Optional<MarketingStrategy> getStrategyByAnalysisId(String analysisId) {
return repository.findByAnalysisId(analysisId);
return repository.findFirstByAnalysisIdOrderByCreatedAtDesc(analysisId);
}
public List<MarketingStrategy> getUserStrategies(String userId) {
@@ -42,8 +42,16 @@ public class TargetingCampaignService {
private final MarketingStrategyRepository strategyRepository;
public TargetingCampaign createCampaign(TargetingCampaignRequest req, String userId) {
if (req.getAnalysisId() == null || req.getAnalysisId().isBlank()) {
throw new IllegalArgumentException("analysisId is required");
if ((req.getAnalysisId() == null || req.getAnalysisId().isBlank()) && (req.getStrategyId() == null || req.getStrategyId().isBlank())) {
throw new IllegalArgumentException("analysisId or strategyId is required");
}
if (req.getStrategyId() != null && !req.getStrategyId().isBlank()) {
MarketingStrategy strategy = strategyRepository.findById(req.getStrategyId())
.orElseThrow(() -> new IllegalArgumentException("Strategy not found: " + req.getStrategyId()));
if (req.getAnalysisId() == null || req.getAnalysisId().isBlank()) {
req.setAnalysisId(strategy.getAnalysisId());
}
}
if (req.getTotalBudgetKzt() == null || req.getTotalBudgetKzt() <= 0) {
throw new IllegalArgumentException("Valid budget is required");
@@ -104,7 +112,7 @@ public class TargetingCampaignService {
if (req.getStrategyId() != null) {
strategy = strategyRepository.findById(req.getStrategyId()).orElse(null);
} else {
strategy = strategyRepository.findByAnalysisId(campaign.getAnalysisId()).orElse(null);
strategy = strategyRepository.findFirstByAnalysisIdOrderByCreatedAtDesc(campaign.getAnalysisId()).orElse(null);
}
if (strategy == null) {
failCampaign(campaign, "Marketing Strategy containing media assets not found.");