Skip to content

TusyaSonne/P2PTransactionsTask

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

12 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

P2P Transactions API

Приложение для перевода средств между счетами пользователей. Поддерживает регистрацию, аутентификацию, создание счетов и переводы с двухфакторным подтверждением. Используется JWT, PostgreSQL и Liquibase с документацией Swagger. Задание выполнено в качестве тестового на вакансию Java dev.

Об авторе

ФИО: Дженбаз Артур Ринатович
Университет: МИРЭА - Российский технологический университет
Город проживания: Москва


Установка и запуск

Требования:

  • Docker Desktop (либо Docker и Docker Compose)

Шаги:

  1. Клонируйте репозиторий:
    git clone https://github.com/TusyaSonne/P2PTransactionsTask.git
  2. Перейдите в директорию проекта:
    cd P2PTransactionsTask
  3. Запустите приложение:
    docker-compose up --build

Документация API

После запуска перейдите на http://localhost:8080/swagger-ui.html, чтобы увидеть описание всех доступных эндпоинтов.


Аутентификация через JWT

Для работы с защищёнными эндпоинтами необходимо авторизоваться с помощью JWT-токена.

  1. Сначала необходимо зарегистрироваться через эндпоинт /auth/register, указав никнейм пользователя и пароль.
  2. Затем выполнить аутентификацию через /auth/login, передав те же данные.
  3. В ответе на успешную аутентификацию вы получите JWT-токен.

Для доступа к защищённым ресурсам вставьте полученный токен в окно Authorize (в правом верхнем углу Swagger UI).

Вставлять токен необходимо в формате:

eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9...

Функциональные требования

1. Пользователи

  • a. Регистрация пользователя в системе
  • b. Аутентификация пользователя в системе
  • c. Получение доступа к своим счетам

2. Управление счетами

  • a. Пользователь может иметь несколько счетов
  • b. Пользователь может просматривать счёт и количество доступных на нём средств
  • c. Пользователь может открывать новые счета с заданной суммой (для упрощения)
  • d. Пользователь может закрывать свои счета

3. P2P-переводы

  • a. Пользователь может совершать переводы на другие счета
  • b. Выбрать счёт-источник
  • c. Указать счёт-получатель
  • d. Ввести сумму перевода
  • e. Процесс перевода:
    • i. Валидация (проверка доступных средств, существования счёта получателя)
      • Для валидации и исполнения перевода необходимо передать confirm = true в теле запроса.
      • Если confirm = false или не передан, API вернёт сообщение с просьбой подтвердить операцию.
    • ii. Подтверждение пользователем и, непосредственно, исполнение перевода

Подробные описания эндпоинтов смотрите в документации OpenAPI.


Технические детали реализации

  • Денежные переводы и балансы представлены с помощью Long (в копейках), что обеспечивает точность и избегает ошибок округления, характерных для double.
  • Доступ к данным реализован через JdbcTemplate, без использования JPA.
  • Настройка всех бинов выполнена вручную через аннотацию @Configuration.

Обработка ошибок и логирование

  • Глобальная обработка исключений реализована в классе GlobalExceptionHandler.
  • Логирование вызовов методов и Замер времени их выполнения реализованы с помощью класса LoggingAspect (через AOP).
  • Также реализовано логирование основных бизнес-функций.

Тестирование

  • Покрытие тестами составляет 88%
  • Поддерживаются как модульные, так и интеграционные тесты
  • Используется in-memory БД H2

Скриншот покрытия:

image


Технологии

  • Язык программирования: Java (17)
  • Фреймворк: Spring Boot (3.5.3)
  • Безопасность: Spring Security
  • База данных: PostgreSQL (15)
  • ORM: Hibernate
  • Миграции БД: Liquibase
  • Тестирование: JUnit 5, Mockito
  • Контейнеризация: Docker, Docker Compose
  • Документация: OpenAPI (Swagger)
  • Сборщик: Maven

Использование LLM

LLM использовалось для облегчения рутинных задач:

  • Формирования Javadoc и Swagger-документации
  • Улучшения структуры тестов и покрытия (корректная формулировка тест-кейсов)

About

Test task for java internship

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published