Приложение для перевода средств между счетами пользователей. Поддерживает регистрацию, аутентификацию, создание счетов и переводы с двухфакторным подтверждением. Используется JWT, PostgreSQL и Liquibase с документацией Swagger. Задание выполнено в качестве тестового на вакансию Java dev.
ФИО: Дженбаз Артур Ринатович
Университет: МИРЭА - Российский технологический университет
Город проживания: Москва
- Docker Desktop (либо Docker и Docker Compose)
- Клонируйте репозиторий:
git clone https://github.com/TusyaSonne/P2PTransactionsTask.git
- Перейдите в директорию проекта:
cd P2PTransactionsTask - Запустите приложение:
docker-compose up --build
После запуска перейдите на http://localhost:8080/swagger-ui.html, чтобы увидеть описание всех доступных эндпоинтов.
Для работы с защищёнными эндпоинтами необходимо авторизоваться с помощью JWT-токена.
- Сначала необходимо зарегистрироваться через эндпоинт
/auth/register, указав никнейм пользователя и пароль. - Затем выполнить аутентификацию через
/auth/login, передав те же данные. - В ответе на успешную аутентификацию вы получите JWT-токен.
Для доступа к защищённым ресурсам вставьте полученный токен в окно Authorize (в правом верхнем углу Swagger UI).
Вставлять токен необходимо в формате:
eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...
- a. Регистрация пользователя в системе
- b. Аутентификация пользователя в системе
- c. Получение доступа к своим счетам
- a. Пользователь может иметь несколько счетов
- b. Пользователь может просматривать счёт и количество доступных на нём средств
- c. Пользователь может открывать новые счета с заданной суммой (для упрощения)
- d. Пользователь может закрывать свои счета
- a. Пользователь может совершать переводы на другие счета
- b. Выбрать счёт-источник
- c. Указать счёт-получатель
- d. Ввести сумму перевода
- e. Процесс перевода:
- i. Валидация (проверка доступных средств, существования счёта получателя)
- Для валидации и исполнения перевода необходимо передать
confirm = trueв теле запроса. - Если
confirm = falseили не передан, API вернёт сообщение с просьбой подтвердить операцию.
- Для валидации и исполнения перевода необходимо передать
- ii. Подтверждение пользователем и, непосредственно, исполнение перевода
- i. Валидация (проверка доступных средств, существования счёта получателя)
Подробные описания эндпоинтов смотрите в документации OpenAPI.
- Денежные переводы и балансы представлены с помощью
Long(в копейках), что обеспечивает точность и избегает ошибок округления, характерных дляdouble. - Доступ к данным реализован через
JdbcTemplate, без использования JPA. - Настройка всех бинов выполнена вручную через аннотацию
@Configuration.
- Глобальная обработка исключений реализована в классе
GlobalExceptionHandler. - Логирование вызовов методов и Замер времени их выполнения реализованы с помощью класса
LoggingAspect(через AOP). - Также реализовано логирование основных бизнес-функций.
- Покрытие тестами составляет 88%
- Поддерживаются как модульные, так и интеграционные тесты
- Используется in-memory БД H2
Скриншот покрытия:
- Язык программирования: Java (17)
- Фреймворк: Spring Boot (3.5.3)
- Безопасность: Spring Security
- База данных: PostgreSQL (15)
- ORM: Hibernate
- Миграции БД: Liquibase
- Тестирование: JUnit 5, Mockito
- Контейнеризация: Docker, Docker Compose
- Документация: OpenAPI (Swagger)
- Сборщик: Maven
LLM использовалось для облегчения рутинных задач:
- Формирования Javadoc и Swagger-документации
- Улучшения структуры тестов и покрытия (корректная формулировка тест-кейсов)
