-
Notifications
You must be signed in to change notification settings - Fork 2
Recommendation Service
Roman Kuzmin edited this page Feb 17, 2025
·
1 revision
RecommendationService отвечает за генерацию рекомендаций для пользователей
на основе их транзакций и динамических правил.
- RecommendationService – интерфейс сервиса.
- RecommendationServiceImpl – реализация сервиса.
Файл: RecommendationService.java
Описание:
Определяет методы получения рекомендаций.
RecommendationResponse getRecommendations(String userId);Описание:
- Получает рекомендации для пользователя по его ID.
- Возвращает объект
RecommendationResponse.
RecommendationResponse getRecommendationsByUserName(String username);Описание:
- Получает рекомендации по имени пользователя.
- Использует
UserRepositoryдля поиска пользователя по имени.
Файл: RecommendationServiceImpl.java
Описание:
Реализует интерфейс RecommendationService.
Использует RuleService для проверки условий рекомендаций.
private static final Logger logger = LoggerFactory.getLogger(RecommendationServiceImpl.class);
private final RuleService ruleService;
private final UserRepository userRepository;- Logger – ведёт логирование работы сервиса.
- RuleService – получает правила рекомендаций.
- UserRepository – находит пользователей.
@Override
@Transactional
public RecommendationResponse getRecommendations(String userId);Описание:
- Проверяет существует ли пользователь.
- Получает все правила рекомендаций.
- Фильтрует правила, которые выполняются.
- Для сработавших правил добавляет рекомендации.
- Увеличивает счетчик срабатывания правила.
Пример работы:
List<RuleSet> allRules = ruleService.getAllRules();
List<Recommendation> recommendations = allRules.stream()
.filter(ruleSet -> ruleService.checkRulesForUser(userId, ruleSet))
.map(ruleSet -> {
ruleService.incrementRuleStat(ruleSet.getId());
return new Recommendation(
ruleSet.getProductName(),
ruleSet.getProductId().toString(),
ruleSet.getProductText());
})
.toList();Пример результата:
{
"user_id": "cd515076-5d8a-44be-930e-8d4fcb79f42d",
"recommendations": [
{
"name": "Простой кредит",
"id": "ab138afb-f3ba-4a93-b74f-0fcee86d447f",
"text": "Откройте мир выгодных кредитов с нами!"
}
]
}@Override
public RecommendationResponse getRecommendationsByUserName(String username);Описание:
- Ищет пользователя по имени.
- Если найден – вызывает
getRecommendations(user.getId()). - Если пользователь не найден – выбрасывает
UserNotFoundException.
Пример ошибки:
{
"error": "Пользователь ivan_petrov не найден!"
}- RecommendationService – интерфейс для работы с рекомендациями.
- RecommendationServiceImpl – проверяет правила, фильтрует рекомендации.
-
Использует
RuleServiceдля проверки условий. - Ведёт статистику срабатываний правил.