A multi-service credit card authorizer API that manages transaction authorization based on benefit categories. The system authorizes transactions by validating card balances against specific merchant categories, ensuring funds are used according to their designated purpose (food, meal, transportation, etc.).
flowchart LR
Client -->|POST /transactions| API[Authorizer API]
API --> AuthService[Authorization Service]
AuthService --> BalanceChecker[Category Balance Checker]
AuthService --> DailyLimit[Daily Limit Checker]
AuthService --> FraudDetection[Fraud Detection]
BalanceChecker -->|fallback: MEAL → FOOD → GENERAL| CardBalance[(Card Balances)]
- Card Registration — Create cards with multiple benefit categories (FOOD, MEAL, TRANSPORTATION, CULTURE, PHARMACY, GENERAL)
- Balance Management — Add and query balances per category with a max of 50,000 per category
- Transaction Authorization — Authorize transactions with category-based balance validation
- Category Fallback — Automatic fallback for MEAL transactions: MEAL → FOOD → GENERAL
- Daily Transaction Limits — Enforced limit of 2,000 per card per day
- Merchant Classification — Register merchants with a single category assignment
- Transaction History — Full transaction audit trail with 90-day retention
- Java 21
- Spring Boot 3.2.5
- Maven
- SpringDoc OpenAPI 2.5 (Swagger UI)
- JUnit 5
- AssertJ
- Mockito
- Checkstyle (Google style)
- Java 21+
- Maven 3.8+
git clone https://github.com/soraiayugulis/authorization.git
cd authorization
mvn clean installmvn spring-boot:runOnce the application is running, access the Swagger UI at:
http://localhost:8080/swagger-ui.html
| Method | Endpoint | Description |
|---|---|---|
| POST | /cards |
Register a new card |
| POST | /cards/{cardId}/balance |
Add balance to a category |
| GET | /cards/{cardId}/balance/{category} |
Query category balance |
| GET | /cards/{cardId} |
Get card details |
| PUT | /cards/{cardId}/status |
Activate/deactivate card |
| POST | /transactions |
Authorize a transaction |
| GET | /cards/{cardId}/transactions |
Get transaction history |
| POST | /merchants |
Register a merchant |
@_sysout