Skip to content

Recommendation Service

Roman Kuzmin edited this page Feb 17, 2025 · 1 revision

Recommendation Service в StarBank

📌 Описание

RecommendationService отвечает за генерацию рекомендаций для пользователей
на основе их транзакций и динамических правил.

  • RecommendationService – интерфейс сервиса.
  • RecommendationServiceImpl – реализация сервиса.

🔹 RecommendationService

Файл: RecommendationService.java
Описание:
Определяет методы получения рекомендаций.

📌 Методы:

RecommendationResponse getRecommendations(String userId);

Описание:

  • Получает рекомендации для пользователя по его ID.
  • Возвращает объект RecommendationResponse.
RecommendationResponse getRecommendationsByUserName(String username);

Описание:

  • Получает рекомендации по имени пользователя.
  • Использует UserRepository для поиска пользователя по имени.

🔹 RecommendationServiceImpl

Файл: 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 для проверки условий.
  • Ведёт статистику срабатываний правил.

Clone this wiki locally