- Ломакин Олег (Капитан)
- Карабанов Андрей
- Лисейчиков Глеб
- Афанасьев Кирилл
- Мальков Павел
Решение прикладных бизнес-задач на java для клиентов из нефтегазовой и финансовой отрасли.
Необходимо реализовать микросервис с собственной базой для контроля баланса на счету юридического лица. Данным счетом пользуются много независимых внешних клиентов. По этой причине изменение баланса счета может происходить одновременно по нескольким независимым запросам, как в сторону увеличения, так и в сторону уменьшения.
- Списания по балансу должно происходить в момент покупки, без задержек для пользователя;
- Значение баланса может увеличиваться и уменьшаться в один момент в несколько потоков, поэтому решение должно предусматривать корректность проведения операций с балансом в многопоточной среде;
- Значение баланса не может стать отрицательным.
- POST /api/v1/transactions : создание транзакции
- GET /api/v1/client : получение всех клиентов
- DELETE /api/v1/client/{clientId} : удаление клиента по Id (изменение статуса на deleted)
- GET /api/v1/client/{clientId} : получение клиента по Id
- GET /api/v1/client/{clientId}/transactions : получение всех транзакций клиента
- GET /api/v1/client/{clientId}/legalEntities : получение всех юр лиц клиента
- POST /api/v1/auth/register : регистрация клиента
- POST /api/v1/auth/login : вход в аккаунт
- POST /api/v1/auth/refresh : обновление JWT токена
- GET /api/v1/legalEntity получение всех юрлиц
- POST /api/v1/legalEntity : создание юрлица
- GET /api/v1/legalEntity/{legalEntityId} : получение юр лица по Id
- DELETE /api/v1/legalEntity/{legalEntityId} : удаление юр лица по Id (изменение статуса на deleted)
- POST /api/v1/legalEntity/assign : добавление пользователя в юр лицо
- GET /api/v1/legalEntity/{legalEntityId}/transactions : получение всех транзакций юр лица
- GET /api/v1/legalEntity/{legalEntityId}/client : получение всех клиентов юрлица
- Java
- Spring (Boot/Security/Data)
- Maven
- PostgreSQL/Liquibase
- Gatling
- Docker
- JUnit/Mockito
- Vaadin
- Скрипт по наполнению тестовыми данными.
- Используем оптимистичные блокировки для сохранения консистентности данных при большом количестве параллельных
обновлений на один и тот же ресурс. Тесты показали выдерживающую нагрузку в 410 RPS
запросы на обновление баланса одного юр лица используя semaphore + optimistic locks - Документация к API. (Интерактивная и api-docs.json).
- Для приложения разработана инструкция по сборке. Сборка выполняется с помощью Docker.
- Присутствует файл .env. Представленные данные являются публичными и используются только! при тестировании.
- Интерактивная Swagger документация (http://localhost:8080/swagger-ui/index.html#/). (При необходимости замените 8080 на ваш порт)
Для сборки приложения необходимо выполнить следующие действия.
-
Склонировать репозиторий:
git clone https://github.com/Osiris3987/hackathon-becoder cd hackathon-becoder git branch main-wo-vaadin -
Выполнить запуск приложения следующей командой:
docker compose up --build
Для сборки приложения необходимо выполнить следующие действия.
-
Склонировать репозиторий:
git clone https://github.com/Osiris3987/hackathon-becoder cd hackathon-becoder -
Сборка проекта
mvn clean package -
Запуск образа Docker с БД:
docker-compose up -d postgres -
Запуск приложения:
java -jar target/hackathon_becoder_backend-0.0.1-SNAPSHOT.jar
