-
Notifications
You must be signed in to change notification settings - Fork 2
Tech general
Система StarBank представляет собой рекомендательный сервис, который анализирует финансовые транзакции пользователей и предоставляет персонализированные предложения по банковским продуктам.
Для принятия решений о рекомендациях используются настраиваемые динамические правила, которые определяют, какие продукты подходят пользователю в зависимости от его поведения.
Система состоит из двух основных источников данных:
- H2 (файловая база) — содержит информацию о пользователях, продуктах и транзакциях.
- PostgreSQL — хранит динамические правила и ведет статистику их срабатываний.
-
Получение данных:
- Система анализирует транзакции пользователя в H2, выполняя SQL-запросы через
JdbcTemplate. - В PostgreSQL запрашиваются динамические правила, которые могут быть изменены без перекомпиляции кода.
- Система анализирует транзакции пользователя в H2, выполняя SQL-запросы через
-
Применение правил:
- Каждое правило представляет собой логический запрос, который сравнивает данные транзакций с заданными условиями.
- Все правила объединяются логическим "И" — если хотя бы одно не выполняется, рекомендация не выдается.
-
Формирование списка рекомендаций:
- Если все условия выполняются, в ответе API возвращается список продуктов, соответствующих правилам.
- Для каждого сработавшего правила увеличивается счетчик в статистике (
rule_stats).
-
Динамические правила хранятся в виде JSON-объектов и включают:
{ "query": "TRANSACTION_SUM_COMPARE", "arguments": ["DEBIT", "DEPOSIT", ">", "100000"], "negate": false }-
query— определяет тип запроса. -
arguments— содержит параметры запроса (тип продукта, сумма, оператор сравнения). -
negate— позволяет инвертировать результат (например, "НЕ является клиентом кредита").
-
-
Обработка правил выполняется через систему обработчиков (
RuleHandlers), где каждый обработчик отвечает за один тип проверки (например,UserOfHandler,TransactionSumCompareHandler). -
Кеширование данных используется для ускорения повторных запросов (Caffeine Cache + Spring Cache).
-
Интеграция с Telegram-ботом позволяет запрашивать рекомендации через команду
/recommend username.
- Взаимодействие с системой осуществляется через REST API.
- Основной метод
GET /recommendation/{userId}принимает ID пользователя и возвращает список рекомендаций. - API позволяет добавлять, удалять и просматривать динамические правила (
POST /rule,DELETE /rule/{ruleId},GET /rule). - Запрос
GET /rule/statsпозволяет получить статистику срабатываний правил.
- SQL-запросы оптимизированы для минимизации нагрузки.
- Используется кеширование правил и транзакций для ускорения работы.
- Архитектура поддерживает расширение набора правил без изменения кода, что позволяет легко масштабировать систему.
- Система анализирует транзакции пользователей и применяет гибкие динамические правила.
- Рекомендации формируются на основе SQL-запросов и хранимых правил.
- Производительность оптимизирована за счет кеширования и минимизации нагрузки на БД.
- Поддерживается управление правилами через API, без изменения кода.
- Гибкость системы позволяет быстро адаптироваться под новые бизнес-логики.