-
Notifications
You must be signed in to change notification settings - Fork 2
RuleService
Файл: 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
Описание:
Реализация 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
Описание:
Интерфейс для всех обработчиков правил (RuleMasterHandler и его наследников).
boolean evaluate(String userId, Rule rule);
// Проверяет выполнение правила для пользователя.
String getRuleKey();
// Возвращает ключ правила.📌 Примечание:
Каждое правило имеет свой обработчик, который выполняет соответствующую логику проверки.
Файл: 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);
// Проверяет, есть ли у пользователя продукт (кешируется).📌 Примечание:
Этот класс служит основой для конкретных обработчиков.
Файл: UserOfHandler.java
Описание:
Проверяет, использует ли пользователь продукт определенного типа.
Методы:
boolean evaluate(String userId, Rule rule);
// Проверяет, есть ли у пользователя продукт.
String getRuleKey();
// Возвращает "USER_OF".Файл: ActiveUserOfHandler.java
Описание:
Проверяет, является ли пользователь активным пользователем продукта (более 5 транзакций).
Методы:
boolean evaluate(String userId, Rule rule);
// Проверяет, имеет ли пользователь 5+ транзакций.
String getRuleKey();
// Возвращает "ACTIVE_USER_OF".Файл: 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.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) снижает нагрузку на базу данных.