- Ломакин Олег (Капитан)
 - Карабанов Андрей
 - Лисейчиков Глеб
 - Афанасьев Кирилл
 - Мальков Павел
 
Решение прикладных бизнес-задач на 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 
