Skip to content

Ratila1/BankRest

Folders and files

NameName
Last commit message
Last commit date

Latest commit

Β 

History

8 Commits
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 
Β 

Repository files navigation

Bank Cards API β€” ВСстовоС ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅

НСбольшая RESTful систСма управлСния банковскими ΠΊΠ°Ρ€Ρ‚Π°ΠΌΠΈ. Π Π΅Π°Π»ΠΈΠ·ΠΎΠ²Π°Π½ΠΎ для тСстового задания Π½Π° ΠΏΠΎΠ·ΠΈΡ†ΠΈΡŽ Java Developer.
ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ ΠΏΠΎΠΊΡ€Ρ‹Π²Π°Π΅Ρ‚ основныС бизнСс-сцСнарии: рСгистрация ΠΈ аутСнтификация ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ (JWT), Ρ€ΠΎΠ»ΠΈ (ADMIN/USER), CRUD ΠΊΠ°Ρ€Ρ‚, поиск/пагинация, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ своими ΠΊΠ°Ρ€Ρ‚Π°ΠΌΠΈ, ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΠ΅ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² ΠΊΠ°Ρ€Ρ‚ ΠΈ маскированиС ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅.


Π‘ΠΎΠ΄Π΅Ρ€ΠΆΠ°Π½ΠΈΠ΅


Π€ΡƒΠ½ΠΊΡ†ΠΈΠΎΠ½Π°Π»

  • РСгистрация ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Π΅ΠΉ ΠΈ Π»ΠΎΠ³ΠΈΠ½ (JWT).
  • Π ΠΎΠ»ΠΈ: ROLE_ADMIN ΠΈ ROLE_USER.
  • CRUD ΠΎΠΏΠ΅Ρ€Π°Ρ†ΠΈΠΈ с ΠΊΠ°Ρ€Ρ‚Π°ΠΌΠΈ (ADMIN): созданиС, Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠ°, активация, ΡƒΠ΄Π°Π»Π΅Π½ΠΈΠ΅, ΠΎΠ±Π½ΠΎΠ²Π»Π΅Π½ΠΈΠ΅ срока дСйствия.
  • ΠŸΡ€ΠΎΡΠΌΠΎΡ‚Ρ€ собствСнных ΠΊΠ°Ρ€Ρ‚ (USER) с Ρ„ΠΈΠ»ΡŒΡ‚Ρ€Π°Ρ†ΠΈΠ΅ΠΉ ΠΏΠΎ статусу ΠΈ ΠΏΠ°Π³ΠΈΠ½Π°Ρ†ΠΈΠ΅ΠΉ.
  • Запрос Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΠΈ ΠΊΠ°Ρ€Ρ‚Ρ‹ ΠΎΡ‚ Π²Π»Π°Π΄Π΅Π»ΡŒΡ†Π° (USER).
  • ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹ ΠΌΠ΅ΠΆΠ΄Ρƒ своими ΠΊΠ°Ρ€Ρ‚Π°ΠΌΠΈ (USER) с ΠΏΡ€ΠΎΠ²Π΅Ρ€ΠΊΠ°ΠΌΠΈ:
    • ΠΏΡ€ΠΈΠ½Π°Π΄Π»Π΅ΠΆΠ°Ρ‚ Π»ΠΈ ΠΊΠ°Ρ€Ρ‚Ρ‹ ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»ΡŽ,
    • Π°ΠΊΡ‚ΠΈΠ²Π½Ρ‹ΠΉ статус,
    • достаточно Π»ΠΈ баланса,
    • нСльзя ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄ΠΈΡ‚ΡŒ Π½Π° Ρ‚Ρƒ ΠΆΠ΅ ΠΊΠ°Ρ€Ρ‚Ρƒ.
  • НомСра ΠΊΠ°Ρ€Ρ‚ хранятся Π·Π°ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ (AES), ΠΏΡ€ΠΈ Π²Ρ‹Π²ΠΎΠ΄Π΅ возвращаСтся маска **** **** **** 1234.
  • Migrations: Liquibase changelogs для создания Ρ‚Π°Π±Π»ΠΈΡ†.
  • Swagger/OpenAPI докумСнтация.

Π’Π΅Ρ…Π½ΠΎΠ»ΠΎΠ³ΠΈΠΈ

  • Java 17
  • Spring Boot 3.x
  • Spring Security (JWT)
  • Spring Data JPA (Hibernate)
  • PostgreSQL
  • Liquibase
  • Docker / Docker Compose
  • jjwt (JWT)
  • springdoc-openapi (Swagger)
  • Maven, JUnit5, Mockito

ВрСбования

  • Docker & Docker Compose (рСкомСндуСтся для dev)
  • Java 17 (для локального запуска)
  • Maven (для локальной сборки)

Быстрый старт (Docker)

Π’ ΠΊΠΎΡ€Π½Π΅ ΠΏΡ€ΠΎΠ΅ΠΊΡ‚Π° Π΅ΡΡ‚ΡŒ docker-compose.yml, ΠΊΠΎΡ‚ΠΎΡ€Ρ‹ΠΉ ΠΏΠΎΠ΄Π½ΠΈΠΌΠ°Π΅Ρ‚ Postgres ΠΈ ΠΏΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅.

  1. Π‘Π±ΠΎΡ€ΠΊΠ° ΠΈ запуск:

    • docker-compose up --build
  2. ПослС запуска:

Docker Compose ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΠ΅Ρ‚ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ Π²Π½ΡƒΡ‚Ρ€ΠΈ Ρ„Π°ΠΉΠ»Π° β€” ΠΏΡ€ΠΈ нСобходимости Ρ€Π΅Π΄Π°ΠΊΡ‚ΠΈΡ€ΡƒΠΉΡ‚Π΅ docker-compose.yml ΠΈ application.yml.


Запуск локально (Maven)

  1. ΠŸΠΎΠ΄Π½ΡΡ‚ΡŒ Π±Π°Π·Ρƒ Π΄Π°Π½Π½Ρ‹Ρ… PostgreSQL (локально ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· Docker).
  2. ΠΠ°ΡΡ‚Ρ€ΠΎΠΈΡ‚ΡŒ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ ΠΏΠΎΠ΄ΠΊΠ»ΡŽΡ‡Π΅Π½ΠΈΡ Π² src/main/resources/application.yml ΠΈΠ»ΠΈ Ρ‡Π΅Ρ€Π΅Π· ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния.
  3. Π‘ΠΎΠ±Ρ€Π°Ρ‚ΡŒ ΠΈ Π·Π°ΠΏΡƒΡΡ‚ΠΈΡ‚ΡŒ:
    • ./mvnw clean package
    • java -jar target/bankcards-0.0.1-SNAPSHOT.jar (ΠΈΠ»ΠΈ mvn spring-boot:run)

ΠŸΡ€ΠΈΠ»ΠΎΠΆΠ΅Π½ΠΈΠ΅ примСняСт Liquibase ΠΌΠΈΠ³Ρ€Π°Ρ†ΠΈΠΈ ΠΏΡ€ΠΈ стартС (созданиС Ρ‚Π°Π±Π»ΠΈΡ† users, cards ΠΈ индСксов).


ΠŸΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния / конфигурация

ΠžΡΠ½ΠΎΠ²Π½Ρ‹Π΅ ΠΏΠ°Ρ€Π°ΠΌΠ΅Ρ‚Ρ€Ρ‹ находятся Π² application.yml:

  • spring.datasource.url β€” JDBC URL Π‘Π”
  • spring.datasource.username
  • spring.datasource.password
  • security.jwt.secret β€” сСкрСт для подписи JWT (ΠΎΠ±ΡΠ·Π°Ρ‚Π΅Π»ΡŒΠ½ΠΎ Π·Π°ΠΌΠ΅Π½ΠΈΡ‚ΡŒ Π² ΠΏΡ€ΠΎΠ΄Π΅ Π½Π° бСзопасный)
  • security.jwt.expiration β€” срок ΠΆΠΈΠ·Π½ΠΈ Ρ‚ΠΎΠΊΠ΅Π½Π° (ms)
  • security.jwt.issuer
  • security.card-encryption.secret β€” сСкрСт для AES ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½ΠΈΡ Π½ΠΎΠΌΠ΅Ρ€ΠΎΠ² ΠΊΠ°Ρ€Ρ‚ (ΠΌΠΈΠ½ΠΈΠΌΡƒΠΌ 16 Π±Π°ΠΉΡ‚). Π’ ΠΏΡ€ΠΎΠ΄Π΅ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒ Π² сСкрСтном Ρ…Ρ€Π°Π½ΠΈΠ»ΠΈΡ‰Π΅.

ΠŸΡ€ΠΈ запускС Ρ‡Π΅Ρ€Π΅Π· Docker Compose ΠΈΡΠΏΠΎΠ»ΡŒΠ·ΡƒΡŽΡ‚ΡΡ ΠΏΠ΅Ρ€Π΅ΠΌΠ΅Π½Π½Ρ‹Π΅ окруТСния, ΠΎΠΏΡ€Π΅Π΄Π΅Π»Ρ‘Π½Π½Ρ‹Π΅ Π² docker-compose.yml.


ДокумСнтация API (OpenAPI / Swagger)

ПослС запуска доступна докумСнтация:

Π’ Π΄ΠΎΠΊΡƒΠΌΠ΅Π½Ρ‚Π°Ρ†ΠΈΠΈ пСрСчислСны всС ΠΊΠΎΠ½Π΅Ρ‡Π½Ρ‹Π΅ Ρ‚ΠΎΡ‡ΠΊΠΈ, ΠΌΠΎΠ΄Π΅Π»ΠΈ запросов/ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ² ΠΈ Π²ΠΎΠ·ΠΌΠΎΠΆΠ½Ρ‹Π΅ ΠΊΠΎΠ΄Ρ‹ ΠΎΡ‚Π²Π΅Ρ‚ΠΎΠ².


АутСнтификация ΠΈ ΠΏΡ€ΠΈΠΌΠ΅Ρ€ запросов (curl)

  1. РСгистрация ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (ROLE_USER)

  2. Π›ΠΎΠ³ΠΈΠ½ β€” ΠΏΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ JWT

    • POST /api/auth/login
    • Π’Π΅Π»ΠΎ (JSON): { "username": "user1", "password": "secret" }
    • ΠŸΡ€ΠΈΠΌΠ΅Ρ€: curl -X POST "http://localhost:8080/api/auth/login"
      -H "Content-Type: application/json"
      -d '{"username":"user1","password":"secret"}'
    • ΠžΡ‚Π²Π΅Ρ‚: { "token": "eyJhbGciOiJI..." }
  3. ИспользованиС Ρ‚ΠΎΠΊΠ΅Π½Π° Authorization:

    • Header: Authorization: Bearer
  4. ΠŸΡ€ΠΈΠΌΠ΅Ρ€Ρ‹ Π²Π°ΠΆΠ½Ρ‹Ρ… эндпоинтов:

  • Π‘ΠΎΠ·Π΄Π°Ρ‚ΡŒ ΠΊΠ°Ρ€Ρ‚Ρƒ для ΠΏΠΎΠ»ΡŒΠ·ΠΎΠ²Π°Ρ‚Π΅Π»Ρ (ADMIN) POST /api/cards/user/{userId} Body: CreateCardRequest JSON: { "cardNumber": "4111111111111111", "expiryDate": "2030-12-31", "initialBalance": 5000.00 }

  • ΠŸΠΎΠ»ΡƒΡ‡ΠΈΡ‚ΡŒ свои ΠΊΠ°Ρ€Ρ‚Ρ‹ GET /api/cards/my?status=ACTIVE&page=0&size=20

  • ΠŸΠ΅Ρ€Π΅Π²ΠΎΠ΄ ΠΌΠ΅ΠΆΠ΄Ρƒ своими ΠΊΠ°Ρ€Ρ‚Π°ΠΌΠΈ POST /api/transfers Body: { "fromCardId": 10, "toCardId": 20, "amount": 100.50 }

  • Π—Π°ΠΏΡ€ΠΎΡΠΈΡ‚ΡŒ Π±Π»ΠΎΠΊΠΈΡ€ΠΎΠ²ΠΊΡƒ ΠΊΠ°Ρ€Ρ‚Ρ‹ (Π²Π»Π°Π΄Π΅Π»Π΅Ρ†) POST /api/cards/{cardId}/request-block


ВСсты

ΠŸΡ€ΠΎΠ΅ΠΊΡ‚ содСрТит ΡŽΠ½ΠΈΡ‚- ΠΈ web-ΠΌΠΎΠΊΠΈ тСсты (JUnit5, Spring Test, Mockito). Запуск:

  • ./mvnw test

ВСсты ΠΏΠΎΠΊΡ€Ρ‹Π²Π°ΡŽΡ‚ ΠΊΠ»ΡŽΡ‡Π΅Π²Ρ‹Π΅ сцСнарии: рСгистрация/Π»ΠΎΠ³ΠΈΠ½, Ρ€Π°Π±ΠΎΡ‚Π° с ΠΊΠ°Ρ€Ρ‚Π°ΠΌΠΈ, ΠΏΠ΅Ρ€Π΅Π²ΠΎΠ΄Ρ‹ ΠΈ ΡƒΡ‚ΠΈΠ»ΠΈΡ‚Ρ‹ (маскированиС).


Π‘Π΅Π·ΠΎΠΏΠ°ΡΠ½ΠΎΡΡ‚ΡŒ ΠΈ примСчания

  • ΠŸΠ°Ρ€ΠΎΠ»ΠΈ хранятся Π·Π°ΠΊΠΎΠ΄ΠΈΡ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΌΠΈ (BCrypt).
  • НомСра ΠΊΠ°Ρ€Ρ‚ ΡˆΠΈΡ„Ρ€ΡƒΡŽΡ‚ΡΡ AES (CardEncryptionService). Π’ production сСкрСты Π΄ΠΎΠ»ΠΆΠ½Ρ‹ Ρ…Ρ€Π°Π½ΠΈΡ‚ΡŒΡΡ Π² Vault/сСкрСтном ΠΌΠ΅Π½Π΅Π΄ΠΆΠ΅Ρ€Π΅.
  • JWT содСрТит Ρ€ΠΎΠ»ΡŒ Π² claim; доступ ΠΊ ΠΌΠ΅Ρ‚ΠΎΠ΄Π°ΠΌ контролируСтся аннотациями @PreAuthorize.
  • Π’Π°Π»ΠΈΠ΄ΠΈΡ€ΡƒΠ΅ΠΌ Π²Ρ…ΠΎΠ΄Π½Ρ‹Π΅ DTO с ΠΏΠΎΠΌΠΎΡ‰ΡŒΡŽ Jakarta Bean Validation; ошибки Π²Π°Π»ΠΈΠ΄aΡ†ΠΈΠΈ Π²ΠΎΠ·Π²Ρ€Π°Ρ‰Π°ΡŽΡ‚ΡΡ Π² Π΅Π΄ΠΈΠ½ΠΎΠΎΠ±Ρ€Π°Π·Π½ΠΎΠΌ Ρ„ΠΎΡ€ΠΌΠ°Ρ‚Π΅ (GlobalExceptionHandler).
  • Π’ Π±Π°Π·Π΅ индСкс Π½Π° Π½ΠΎΠΌΠ΅Ρ€ ΠΊΠ°Ρ€Ρ‚Ρ‹ (ΡˆΠΈΡ„Ρ€ΠΎΠ²Π°Π½Π½Ρ‹ΠΉ тСкст). Π’ Π±ΠΎΠ΅Π²ΠΎΠΉ систСмС стоит ΠΏΠ΅Ρ€Π΅ΡΠΌΠΎΡ‚Ρ€Π΅Ρ‚ΡŒ индСксированиС ΠΈ ΠΊΠΎΠ½Ρ„ΠΈΠ΄Π΅Π½Ρ†ΠΈΠ°Π»ΡŒΠ½ΠΎΡΡ‚ΡŒ Π΄Π°Π½Π½Ρ‹Ρ… с Ρ‚ΠΎΡ‡ΠΊΠΈ зрСния Ρ‚Ρ€Π΅Π±ΠΎΠ²Π°Π½ΠΈΠΉ PCI DSS.

About

πŸ’³ Secure Bank Card Management System. Built with Spring Boot 3 & JWT. Features AES card encryption, Role-Based Access Control (RBAC), Liquibase migrations, and Swagger API documentation.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors