Микросервисное банковское приложение на Java с использованием Spring Boot, обеспечивающее основные банковские операции через REST API.
Приложение построено по многослойной архитектуре:
┌─────────────────────────────────────────────────┐
│ Presentation Layer │
│ (REST Controllers) │
└─────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────┐
│ Service Layer │
│ (Business Logic Implementation) │
└─────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────┐
│ Repository Layer │
│ (Data Access & Persistence) │
└─────────────────────────────────────────────────┘
┌─────────────────────────────────────────────────┐
│ Database Layer │
│ (PostgreSQL Database) │
└─────────────────────────────────────────────────┘
- Контроллеры: Обработка HTTP-запросов и валидация
- Сервисы: Бизнес-логика и транзакции
- Репозитории: Доступ к данным через Spring Data JPA
- Сущности: Модели данных (Пользователи, Счета, Транзакции)
- Конфигурация: Настройки безопасности и приложения
- Backend: Java 21, Spring Boot 3.5.0
- База данных: PostgreSQL 13
- Безопасность: Spring Security, JWT-аутентификация
- Документация: Springdoc OpenAPI (Swagger UI)
- Контейнеризация: Docker, Docker Compose
- Тестирование: JUnit 5, Mockito, Testcontainers
- Сборка: Maven
- Java 21 или выше
- Maven 3.8+
- Docker и Docker Compose
# Клонирование репозитория
git clone https://github.com/exception-s/BankApplication.git
cd BankApplication
# Запуск приложения с базой данных
docker-compose up --build
Приложение будет доступно по адресу: http://localhost:8080
Приложение использует JWT-аутентификацию. Для доступа к защищенным endpoint'ам необходимо:
- Зарегистрировать пользователя
- Получить JWT-токен через endpoint аутентификации
- Добавлять токен в заголовок запроса:
Authorization: Bearer <token>
curl -X POST "http://localhost:8080/api/auth/register" \
-H "Content-Type: application/json" \
-d '{
"username": "john_doe",
"password": "securePassword123",
"email": "john.doe@example.com"
}'
curl -X POST "http://localhost:8080/api/auth/authenticate" \
-H "Content-Type: application/json" \
-d '{
"username": "john_doe",
"password": "securePassword123"
}'
Ответ:
{
"token": "eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
}
curl -X POST "http://localhost:8080/api/accounts" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
-H "Content-Type: application/json" \
-d '{
"userId": "1",
"currency": "USD"
}'
curl -X GET "http://localhost:8080/api/accounts/1/balance" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
curl -X POST "http://localhost:8080/api/transactions/transfer" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..." \
-H "Content-Type: application/json" \
-d '{
"fromAccountId": 1,
"toAccountId": 2,
"amount": 150.50,
"description": "Payment for services",
"fromCurrency": "USD",
"toCurrency": "USD"
}'
curl -X GET "http://localhost:8080/api/transactions/account/1" \
-H "Authorization: Bearer eyJhbGciOiJIUzI1NiIsInR5cCI6IkpXVCJ9..."
# Все тесты
mvn test
# Только модульные тесты
mvn test -Dtest=*UnitTest
# Только интеграционные тесты
mvn test -Dtest=*IntegrationTest
- Модульные тесты: Тестирование отдельных компонентов (сервисы, утилиты)
- Тесты контроллеров: Тестирование API endpoints
- Интеграционные тесты: Полные сценарии с Testcontainers
- users: Информация о пользователях
- user_roles: Роли пользователей (USER, ADMIN)
- bank_accounts: Банковские счета
- transactions: История транзакций