- Java 21
- Gradle 8.6
- Spring Boot 3.2.5
- PostgreSQL
- H2 (для тестов)
Далее будут написаны эндпоинты, к которым можно посылать запросы, а также огранчения, в случае не соблдения которых, ответ будет содержать 4xx-статус.
-
Добавить банк: add bank <name> [limit]
GET /api/v1/banks
Ограничения: a. Название банка не должно быть пустым b. Лимит, если есть, должен быть больше 0 c. Навзание банков уникально (так как оставльные запросы выполняются по имени банка, а не по его id)
-
Добавить карту: add card <bank name> <card name>
POST http://localhost:8080/api/v1/cards
Ограничения: a. Название карты не должно быть пустым b. Название банка не должно быть пустым и должно существовать в БД c. Название карты уникально (так как оставльные запросы выполняются по имени карты, а не по ее id)
-
Установить категории кешбека в текущем месяце / новом преиоде: add current cashback <card name> <category> <percent> [permanent]
POST http://localhost:8080/api/v1/cashback/current? cardName=somecard& category=somecategory& cashbackPercentage=10& isPermanent=false
POST http://localhost:8080/api/v1/cashback/future? cardName=somecard& category=somecategory& cashbackPercentage=10& isPermanent=false
Примечания: a. Для текущего месяца, дата начала периода - 1 число текущего месяца b. Для будущего месяца, дата начала периода - 1 число следующего месяца (так как в запросе не указана дата)
Ограничения: a. Название карты не должно быть пустым и должно существовать в БД b. Название категории не должно быть пустым c. Процент должен быть больше 0 d. Если в текущем периоде уже установлен кешбек для данной категории, то
-
Удалить категории кешбека в текущем/новом периоде: remove current/future cashback <card name> <category>
DELETE http://localhost:8080/api/v1/cashback/current? cardName=somecard& category=somecategory
DELETE http://localhost:8080/api/v1/cashback/future? cardName=somecard& category=somecategory
Примечания (аналогично предыдущему пункту): a. Для текущего месяца, дата начала периода - 1 число текущего месяца b. Для будущего месяца, дата начала периода - 1 число следующего месяца (так как в запросе не указана дата)
Ограничения: a. Название карты не должно быть пустым и должно существовать в БД b. Название категории не должно быть пустым
-
Показать список карт: card list
GET http://localhost:8080/api/v1/cards
-
Добавить покупку - нужно для учета превышения лимита возврата: add transaction <card name> <category> <value>
POST http://localhost:8080/api/v1/transactions
Ограничения: a. Название карты не должно быть пустым и должно существовать в БД b. Название категории не должно быть пустым c. Значение должно быть больше 0
-
Выбрать карту для оплаты:
GET http://localhost:8080/api/v1/cards/choose? category=somecategory& value=somevalue(numeric)
Ограничения: a. Название категории не должно быть пустым b. Значение должно быть больше 0
Принцип работы: Будет выбрана карта, которая принесет наибольшую сумму кэшбека. Если ни у одной карты нет подходящего кэщбека, будет выбрана случайная(первая попавшаяся) карта из БД. Если карт нет в БД, будет возвращен пустой ответ со статусом 200.
-
Оценить кешбек: estimate cashback
GET http://localhost:8080/api/v1/cards/estimate
-
удалить просроченные кэшбеки (дополнитеьлно):
DELETE http://localhost:8080/api/v1/cashback/expire
Примечания: Удаляются все кэшбеки, которые истекли на текущий момент. Сделано для того, чтобы действущие кэшбеки искались быстрее. (Если не нужно хранить историю кэшбеков)
- Перход от монолитной архитектуры к микросервисной
- Подключение брокера сообщений для ускорения POST-подобных запросов (в моей реализации используются индексы для базы данных (для ускоренного поиска некоторых значений), в следствии чего POST-подобные запросы в случае большого количества данных могут занимать много времени)