Bank_REST_TEST
Система управления банковскими картами
Описание
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.