A semi-realistic banking interface built to:
- Test and validate a custom Dependency Injection container implementation.
- Design and fully understand DDD architecture.
- Solve a real-world problem
- Implement everything by hand with almost no copy/paste.
- Learn and write tests
This project simulates a banking system, following clean architecture principles. The primary goal is to design and fully understand Value Objects, design better and clean Entities, and get a better vision on all hidden architectural concepts hidden under frameworks in Spring Boot, to improve general Java knowledge. Also, the goal is to verify DI container functionality—service resolution, dependency injection, and lifecycle management—in a non-trivial, real-world context.
- Customer registration interactions (login, sign up, profile mgmt)
- Session Token
- Refresh Token authentication
- JWT implementation
- Account management (create, check balance)
- Transactions (deposit, withdraw, transfer)
- Transaction history viewing
- Register customer
- Login (receives auth token)
- Create an account
- Check balance
- Deposit money
- Withdraw money
- Transfer between accounts
- View transaction history
CLI → Service → Repository → Domain
Example flow: deposit 100 → CommandHandler → TransactionService → AccountRepository → Domain model update → CLI output
- Storage: In-memory (
Map<ID, Entity>) + JSON locally [Future upgrade: PostgreSQL] - IDs: Digit and ASCII identifiers / UUID
- Tokens: Session Token, Refresh token, JWT, Idempotency Key
- Money:
BigDecimal>> Multiple currencies - Validation: No negative transfers, currency safety, sufficient balance checks, valid token enforcement, operation idempotency validation, privileges
cli/- User interface layer (commands, menu, input parsing)application/- Service interfaces, implementations, DTOs, mappersdomain/- Core business models, value objects, exceptionscommon/- Layer-wide shared modules of general purpose (Rules, Generators)infrastructure/- Repositories, security, utilities
Controlled environment to validate DI container behavior—service graphs, circular dependencies, scopes, and lifecycle hooks—within a coherent, understandable domain that can be tested for its ability to handle various loads and for security vulnerabilities.
See GitHub Issues with "roadmap" label
- In-Memory storage
- JSON local storage
- PostgreSQL
- TOMCAT
- SERVLET
- Complete Web Support
- Multi-lang support
- Docker containerization
- Rate Limiting