Bank_REST_TEST

0
README.md

Система управления банковскими картами

Описание

Backend-приложение на Java (Spring Boot) для управления банковскими картами. Приложение реализует функциональность создания, просмотра, управления и перевода средств между картами. Поддерживает аутентификацию, авторизацию, валидацию и обеспечивает безопасность данных.

Функциональность

Управление картами:

• Создание карт (ADMIN) • Блокировка/Активация карт (ADMIN, USER) • Удаление карт (ADMIN) • Просмотр информации о картах (ADMIN, USER) • Просмотр своих карт с пагинацией (USER)

Переводы:

• Переводы между своими картами (USER)

Безопасность:

• Аутентификация и авторизация с использованием Spring Security и JWT. • Ролевой доступ (ADMIN, USER). • Маскирование номеров карт. • Шифрование данных (пароли пользователей).

Управление пользователями:

• Регистрация пользователей • Аутентификация пользователей

Технологии

• Java 17+ • Spring Boot 2.7.5+ • Spring Security • Spring Data JPA • PostgreSQL (Рекомендуется) / MySQL • Liquibase (для миграций БД) • Docker • JWT (JSON Web Tokens) • Swagger UI / OpenAPI (для документации API)

Архитектура

Приложение построено с использованием следующих принципов и паттернов:

Clean Architecture: Разделение логики на слои (контроллеры, сервисы, репозитории, сущности) для обеспечения модульности и удобства поддержки.

SOLID: Принципы SOLID применяются для проектирования классов и интерфейсов, что способствует гибкости и расширяемости.

DTO (Data Transfer Objects): Используются для передачи данных между слоями и API, что позволяет изолировать структуру внутренних объектов от внешнего представления.

JPA (Java Persistence API): Используется для взаимодействия с базой данных, что упрощает работу с данными.

Spring Security: Используется для реализации аутентификации и авторизации.

JWT: Используется для управления сессиями и безопасной передачи информации о пользователе.

Сборка и запуск

Проект включает файл docker-compose.yml, который создает контейнер сервиса и базы данных.

Доступ к API:

* Swagger UI доступен по адресу http://localhost:8080/swagger-ui.html. * Используйте Swagger для просмотра документации API и тестирования запросов.

API Endpoints

API реализован в соответствии с принципами REST. Доступные endpoints включают в себя:

/user/register (POST): Регистрация нового пользователя. Принимает данные пользователя UserDto.

/user/authenticate (POST): Получение JWT токена (для аутентификации). Принимает данные пользователя UserDto.

/admin/cards (POST): Создание новой карты (ADMIN). Принимает CardCreateDto.

/admin/cards/{id} (PUT): Обновление карты (ADMIN). Принимает ID карты и CardUpdateDto.

/admin/cards/{id} (DELETE): Удаление карты (ADMIN). Принимает ID карты.

/admin/cards (GET): Получение всех карт (ADMIN).

/admin/cards/{id}/block (POST): Блокировка карты (ADMIN). Принимает ID карты.

/admin/cards/{id}/activate (POST): Активация карты (ADMIN). Принимает ID карты.

/cards (GET): Получение карт пользователя с пагинацией (USER).

/cards/transfer (POST): Перевод средств между картами пользователя (USER). Принимает TransferDto.

/cards/{id}/balance (GET): Получение баланса карты (USER). Принимает ID карты.

/cards/{id}/request-block (POST): Запрос на блокировку карты (USER). Принимает ID карты.

Аутентификация и авторизация

• Для доступа к защищенным API необходимо предоставить JWT токен в заголовке Authorization в формате Bearer <токен>.

• Токен можно получить, вызвав endpoint /authenticate с корректными учетными данными.

• API разделены по ролям (ADMIN и USER). Доступ к определённым ресурсам ограничен в соответствии с ролью пользователя.

База данных

• Используется PostgreSQL. Структура базы данных управляется с помощью Liquibase. • Миграции находятся в каталоге src/main/resources/iquibase.

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

• Приложение покрыто юнит-тестами, которые находятся в каталоге src/test/java. • Используются Mockito и JUnit для написания тестов.

Развертывание

• Приложение может быть легко развернуто с использованием Docker Compose.

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

• Документация API доступна в Swagger UI по адресу http://localhost:8080/swagger-ui.html.

• OpenAPI спецификация доступна в файле docs/openapi.yaml.