Skip to content

Repository

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

Репозитории в StarBank

ProductRepository.java

Описание:
Репозиторий для работы с банковскими продуктами. Использует JdbcTemplate вместо JPA.

Методы:

public List<Product> findAllProducts();
// Получает все банковские продукты из базы данных.

SQL-запрос:

SELECT * FROM PRODUCTS;

📌 Примечание:
Доступ к продуктам реализован через чистый SQL, что даёт гибкость, но может быть оптимизировано кешированием.


RuleSetRepository.java

Описание:
Репозиторий для работы с наборами правил (RuleSet). Использует Spring Data JPA.

Методы:

Optional<RuleSet> findByProductId(UUID productId);
// Получает набор правил по ID продукта.

📌 Примечание:
Использование JPA упрощает работу с RuleSet, позволяя Spring управлять SQL-запросами.


RuleStatRepository.java

Описание:
Репозиторий для работы со статистикой срабатывания правил (RuleStat). Использует Spring Data JPA.

Методы:

Optional<RuleStat> findByRuleId(Long ruleId);
// Получает статистику срабатывания по ID правила.

void deleteByRuleId(Long ruleId);
// Удаляет статистику срабатывания по ID правила.

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


TransactionRepository.java

Описание:
Репозиторий для работы с банковскими транзакциями. Использует JdbcTemplate.

Методы:

public List<Transaction> findTransactionsByUserId(String userId);
// Получает список транзакций пользователя.

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

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

public double getTotalExpenses(String userId, String productType);
// Считает сумму трат пользователя по указанному типу продукта.

SQL-запрос:

SELECT t.id, t.amount, t.type, t.date, 
       u.id AS user_id, u.name AS user_name,
       p.id AS product_id, p.name AS product_name, p.type AS product_type, p.description AS product_description
FROM TRANSACTIONS t
JOIN USERS u ON t.user_id = u.id
JOIN PRODUCTS p ON t.product_id = p.id
WHERE t.user_id = ?;

📌 Примечание:
Этот репозиторий ключевой для выполнения правил рекомендаций, так как агрегирует транзакции пользователей.


UserRepository.java

Описание:
Репозиторий для работы с пользователями. Использует JdbcTemplate.

Методы:

public List<User> findAllUsers();
// Получает всех пользователей.

public Optional<User> findUserByName(String username);
// Ищет пользователя по имени (регистр-независимый поиск).

SQL-запрос:

SELECT * FROM USERS WHERE LOWER(username) = LOWER(?);

📌 Примечание:
Используется, в частности, для поиска пользователей в Telegram-боте.

Clone this wiki locally