Skip to content

Tech general

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

📌 Техническое описание системы StarBank

🔹 Основная концепция

Система StarBank представляет собой рекомендательный сервис, который анализирует финансовые транзакции пользователей и предоставляет персонализированные предложения по банковским продуктам.

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

Система состоит из двух основных источников данных:

  • H2 (файловая база) — содержит информацию о пользователях, продуктах и транзакциях.
  • PostgreSQL — хранит динамические правила и ведет статистику их срабатываний.

🔹 Принцип работы системы

  1. Получение данных:

    • Система анализирует транзакции пользователя в H2, выполняя SQL-запросы через JdbcTemplate.
    • В PostgreSQL запрашиваются динамические правила, которые могут быть изменены без перекомпиляции кода.
  2. Применение правил:

    • Каждое правило представляет собой логический запрос, который сравнивает данные транзакций с заданными условиями.
    • Все правила объединяются логическим "И" — если хотя бы одно не выполняется, рекомендация не выдается.
  3. Формирование списка рекомендаций:

    • Если все условия выполняются, в ответе 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.

🔹 API и взаимодействие

  • Взаимодействие с системой осуществляется через REST API.
  • Основной метод GET /recommendation/{userId} принимает ID пользователя и возвращает список рекомендаций.
  • API позволяет добавлять, удалять и просматривать динамические правила (POST /rule, DELETE /rule/{ruleId}, GET /rule).
  • Запрос GET /rule/stats позволяет получить статистику срабатываний правил.

🔹 Производительность и масштабируемость

  • SQL-запросы оптимизированы для минимизации нагрузки.
  • Используется кеширование правил и транзакций для ускорения работы.
  • Архитектура поддерживает расширение набора правил без изменения кода, что позволяет легко масштабировать систему.

📌 Итог

  • Система анализирует транзакции пользователей и применяет гибкие динамические правила.
  • Рекомендации формируются на основе SQL-запросов и хранимых правил.
  • Производительность оптимизирована за счет кеширования и минимизации нагрузки на БД.
  • Поддерживается управление правилами через API, без изменения кода.
  • Гибкость системы позволяет быстро адаптироваться под новые бизнес-логики.

Clone this wiki locally