A full-stack application for managing bank accounts and transfers, built with Java Spring Boot backend and React TypeScript frontend.
- View list of all bank accounts
- Create new accounts with unique names and IBANs
- Edit existing account details
- Freeze/unfreeze accounts
- View account balances
- View all transfers for specific accounts
- Create transfers between accounts
- Real-time balance updates
- Transfer history tracking
- Java 17
- Spring Boot 3.1.5
- Spring Data JPA
- PostgreSQL Database (H2 for quick testing)
- Maven for dependency management
- React 18 with TypeScript
- Axios for API communication
- CSS3 for styling
joni/
├── backend/ # Java Spring Boot application
│ ├── src/main/java/com/bankmanagement/
│ │ ├── entity/ # JPA entities (Account, Transfer)
│ │ ├── repository/ # Data access layer
│ │ ├── service/ # Business logic layer
│ │ ├── controller/ # REST API endpoints
│ │ └── BankManagementApplication.java
│ ├── src/main/resources/
│ │ └── application.properties
│ └── pom.xml
├── frontend/ # React TypeScript application
│ ├── src/
│ │ ├── components/ # React components
│ │ ├── services/ # API service layer
│ │ ├── types/ # TypeScript type definitions
│ │ └── App.tsx
│ ├── package.json
│ └── tsconfig.json
└── README.md
GET /api/accounts- Get all accountsGET /api/accounts/{id}- Get account by IDPOST /api/accounts- Create new accountPUT /api/accounts/{id}- Update accountPUT /api/accounts/{id}/freeze- Freeze accountPUT /api/accounts/{id}/unfreeze- Unfreeze accountDELETE /api/accounts/{id}- Delete account
GET /api/transfers- Get all transfersGET /api/transfers/{id}- Get transfer by IDGET /api/transfers/account/{accountId}- Get transfers for specific accountPOST /api/transfers- Create new transfer
id(Primary Key)name(Unique)iban(Unique)status(ACTIVE/FROZEN)available_amountcreated_onmodified_on
id(Primary Key)account_idbeneficiary_account_idtype(CREDIT/DEBIT)amountcreated_onmodified_on
- Java 17 or higher
- Maven 3.6+
- Node.js 16+ and npm
- PostgreSQL 12+ (or Docker)
-
Option 1 - Docker (Recommended):
docker run --name bankdb-postgres \ -e POSTGRES_DB=bankdb \ -e POSTGRES_USER=postgres \ -e POSTGRES_PASSWORD=password \ -p 5432:5432 \ -d postgres:15
-
Option 2 - Local PostgreSQL:
- Install PostgreSQL from https://www.postgresql.org/
- Create database:
CREATE DATABASE bankdb; - Use credentials: postgres/password
See POSTGRESQL_SETUP.md for detailed instructions.
-
Navigate to the backend directory:
cd backend -
Install dependencies and run the application:
mvn clean install mvn spring-boot:run
-
The backend will start on
http://localhost:8080 -
Database tables will be automatically created on first run
-
Navigate to the frontend directory:
cd frontend -
Install dependencies:
npm install
-
Start the development server:
npm start
-
The frontend will start on
http://localhost:3000
- Create Accounts: Start by creating bank accounts with unique names and IBANs
- Manage Accounts: View all accounts, freeze/unfreeze them as needed
- Create Transfers: Transfer money between active accounts
- View Transfer History: Monitor all transfers for specific accounts
- Account names and IBANs must be unique
- IBAN format validation (basic pattern matching)
- Transfer amounts must be positive
- Transfers only allowed between active accounts
- Sufficient balance validation for transfers
- Hot Reload: Both frontend and backend support hot reload during development
- Error Handling: Comprehensive error handling with user-friendly messages
- Responsive Design: Mobile-friendly UI
- Type Safety: Full TypeScript support in frontend
- User authentication and authorization
- Account types (Savings, Checking, etc.)
- Transfer fees and limits
- Transaction categories and descriptions
- Export functionality for statements
- Email notifications for transfers
- Real-time notifications
- Audit logging
- Fork the repository
- Create a feature branch
- Commit your changes
- Push to the branch
- Create a Pull Request
This project is for educational purposes.