Skip to content

RuleService

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

Rule Service и обработчики правил в StarBank

RuleService.java

Файл: RuleService.java
Описание:
Интерфейс для управления правилами (RuleSet) и статистикой их срабатывания.

Методы:

List<RuleSet> getAllRules();
// Получает список всех наборов правил.

RuleSet getRulesByProductId(UUID productId);
// Возвращает набор правил для указанного продукта.

RuleSet setRules(RuleSet newRules);
// Устанавливает новый список правил.

boolean checkRulesForUser(String userId, RuleSet ruleSet);
// Проверяет, соответствует ли пользователь набору правил.

RuleSet deleteRuleSet(Long id);
// Удаляет набор правил.

List<RuleStat> getRuleStats();
// Получает статистику срабатывания всех правил.

void incrementRuleStat(Long ruleId);
// Увеличивает счетчик срабатываний для правила.

📌 Примечание:
Этот интерфейс определяет API для работы с динамическими правилами, которые управляют рекомендациями.


RuleServiceImpl.java

Файл: RuleServiceImpl.java
Описание:
Реализация RuleService, использует Spring Data JPA и динамическое подключение обработчиков правил.

Важные моменты:

  • Хранит список обработчиков (ruleHandlers) и использует их для проверки правил.
  • Кеширует результаты проверок (@Cacheable).
  • Ведет статистику срабатываний правил.

Методы:

List<RuleSet> getAllRules();
// Получает все наборы правил.

RuleSet getRulesByProductId(UUID id);
// Возвращает набор правил для продукта.

RuleSet setRules(RuleSet ruleSet);
// Добавляет новый набор правил.

RuleSet deleteRuleSet(Long id);
// Удаляет набор правил.

boolean checkRulesForUser(String userId, RuleSet ruleSet);
// Проверяет, соответствуют ли правила пользователю.

void incrementRuleStat(Long ruleId);
// Увеличивает счетчик срабатываний.

📌 Примечание:
Этот сервис динамически загружает обработчики правил (RuleHandler) и использует их для оценки рекомендаций.


RuleHandler.java

Файл: RuleHandler.java
Описание:
Интерфейс для всех обработчиков правил (RuleMasterHandler и его наследников).

Методы:

boolean evaluate(String userId, Rule rule);
// Проверяет выполнение правила для пользователя.

String getRuleKey();
// Возвращает ключ правила.

📌 Примечание:
Каждое правило имеет свой обработчик, который выполняет соответствующую логику проверки.


RuleMasterHandler.java

Файл: RuleMasterHandler.java
Описание:
Абстрактный базовый класс для всех обработчиков правил.
Реализует общие методы для получения данных о транзакциях и продуктов пользователя.

Методы:

boolean compare(double actual, String operator, double value);
// Универсальное сравнение чисел (>, >=, <, <=, ==, !=).

double getTotalAmount(String userId, String productType, String transactionType);
// Считает сумму транзакций по пользователю и типу продукта.

int hasProductCount(String userId, String productType);
// Считает количество транзакций по продукту.

boolean hasProduct(String userId, String productType);
// Проверяет, есть ли у пользователя продукт (кешируется).

📌 Примечание:
Этот класс служит основой для конкретных обработчиков.


Обработчики правил (RuleHandlers)

UserOfHandler

Файл: UserOfHandler.java
Описание:
Проверяет, использует ли пользователь продукт определенного типа.

Методы:

boolean evaluate(String userId, Rule rule);
// Проверяет, есть ли у пользователя продукт.

String getRuleKey();
// Возвращает "USER_OF".

ActiveUserOfHandler

Файл: ActiveUserOfHandler.java
Описание:
Проверяет, является ли пользователь активным пользователем продукта (более 5 транзакций).

Методы:

boolean evaluate(String userId, Rule rule);
// Проверяет, имеет ли пользователь 5+ транзакций.

String getRuleKey();
// Возвращает "ACTIVE_USER_OF".

TransactionSumCompareHandler

Файл: TransactionSumCompareHandler.java
Описание:
Сравнивает сумму транзакций по определенному продукту с заданным значением.

Методы:

boolean evaluate(String userId, Rule rule);
// Сравнивает сумму транзакций с константой.

String getRuleKey();
// Возвращает "TRANSACTION_SUM_COMPARE".

📌 Пример правила JSON:

{
    "query": "TRANSACTION_SUM_COMPARE",
    "arguments": ["DEBIT", "DEPOSIT", ">", "100000"],
    "negate": false
}

🔹 Пояснение: Проверяет, внес ли пользователь более 100 000 ₽ на дебетовый счет.


TransactionSumCompareDepositWithdrawHandler

Файл: TransactionSumCompareDepositWithdrawHandler.java
Описание:
Сравнивает сумму пополнений с суммой расходов по продукту.

Методы:

boolean evaluate(String userId, Rule rule);
// Сравнивает депозиты с расходами.

String getRuleKey();
// Возвращает "TRANSACTION_SUM_COMPARE_DEPOSIT_WITHDRAW".

📌 Пример правила JSON:

{
    "query": "TRANSACTION_SUM_COMPARE_DEPOSIT_WITHDRAW",
    "arguments": ["DEBIT", ">"],
    "negate": false
}

🔹 Пояснение: Проверяет, вносит ли пользователь больше денег, чем тратит.


✅ RuleService управляет правилами и их статистикой.
✅ RuleMasterHandler предоставляет общие методы для работы с транзакциями.
✅ Обработчики (RuleHandlers) выполняют конкретные проверки.
✅ Система поддерживает динамические правила, позволяя гибко настраивать рекомендации.
✅ Кеширование (@Cacheable) снижает нагрузку на базу данных.

Clone this wiki locally