Skip to content

riskman5/CashbackHelper

Repository files navigation

Кэшбек помощник (RestApi сервис)

Используемые технологии:

  • Java 21
  • Gradle 8.6
  • Spring Boot 3.2.5
  • PostgreSQL
  • H2 (для тестов)

Команды

Далее будут написаны эндпоинты, к которым можно посылать запросы, а также огранчения, в случае не соблдения которых, ответ будет содержать 4xx-статус.

  1. Добавить банк: add bank <name> [limit]

    GET /api/v1/banks
    Ограничения:
           a. Название банка не должно быть пустым
           b. Лимит, если есть, должен быть больше 0
           c. Навзание банков уникально (так как оставльные запросы
                 выполняются по имени банка, а не по его id)
    
  2. Добавить карту: add card <bank name> <card name>

    POST http://localhost:8080/api/v1/cards
     Ограничения:
              a. Название карты не должно быть пустым
              b. Название банка не должно быть пустым и должно существовать в БД
              c. Название карты уникально (так как оставльные запросы
                 выполняются по имени карты, а не по ее id)
    
  3. Установить категории кешбека в текущем месяце / новом преиоде: 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. Если в текущем периоде уже установлен кешбек для данной категории,
                то 
    
  4. Удалить категории кешбека в текущем/новом периоде: 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. Название категории не должно быть пустым
    
  5. Показать список карт: card list

    GET http://localhost:8080/api/v1/cards
  6. Добавить покупку - нужно для учета превышения лимита возврата: add transaction <card name> <category> <value>

    POST http://localhost:8080/api/v1/transactions
    Ограничения:
            a. Название карты не должно быть пустым и должно существовать в БД
            b. Название категории не должно быть пустым
            c. Значение должно быть больше 0
    
  7. Выбрать карту для оплаты:

     GET http://localhost:8080/api/v1/cards/choose?
     category=somecategory&
     value=somevalue(numeric)
    Ограничения:
            a. Название категории не должно быть пустым
            b. Значение должно быть больше 0
    
    Принцип работы:
         Будет выбрана карта, которая принесет наибольшую сумму кэшбека.
         Если ни у одной карты нет подходящего кэщбека, будет выбрана случайная(первая попавшаяся) карта из БД.
         Если карт нет в БД, будет возвращен пустой ответ со статусом 200.
    
  8. Оценить кешбек: estimate cashback

     GET http://localhost:8080/api/v1/cards/estimate
  9. удалить просроченные кэшбеки (дополнитеьлно):

    DELETE http://localhost:8080/api/v1/cashback/expire
    Примечания:
          Удаляются все кэшбеки, которые истекли на текущий момент.
          Сделано для того, чтобы действущие кэшбеки искались быстрее.
          (Если не нужно хранить историю кэшбеков)
    

Возможные улучшения:

  1. Перход от монолитной архитектуры к микросервисной
  2. Подключение брокера сообщений для ускорения POST-подобных запросов (в моей реализации используются индексы для базы данных (для ускоренного поиска некоторых значений), в следствии чего POST-подобные запросы в случае большого количества данных могут занимать много времени)

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages