Sample app exposes rest api to make transfer from one account to another. Updates both accounts balance in one transaction. Doesn't maintain transaction history. Uses Spark Framework for REST API and Guice as IoC container.
- Create account
POST http://localhost:4567/accounts/
payload
{
"ownerName":"user_1"
}
- Update account (make deposit, update user name)
PUT http://localhost:4567/accounts/{account_id}
payload
{
"balance":100
}
- Get Account (view actual account status)
GET http://localhost:4567/accounts/{account_id}
- Make transfer between accounts
POST http://localhost:4567/transactions/
payload
{
"fromAccountId":"{account_id}",
"toAccountId":"{account_id}",
"amount": {amount_value}
}
- Tools below has to be available to run application:
- Gradle 5+
- JDK 12+
gradle execute
or
gradle build
java -jar ./build/libs/SimpleTransfer-0.0.1-SNAPSHOT.jar
- Create first account
$ curl -d "{"ownerName":"user_1"}" -X POST http://localhost:4567/accounts/ ; echo $line;
{"id":"2f1fb7d9-e0b7-4bfa-9241-1bb7511152d9","ownerName":"user_1","balance":0}
- Create second account
$ curl -d "{"ownerName":"user_1"}" -X POST http://localhost:4567/accounts/ ; echo $line;
{"id":"0e201bfe-7bbd-4362-a889-80991c1acf31","ownerName":"user_1","balance":0}
- Deposit 100 units to first account
$ curl -d "{"balance":100}" -X PUT http://localhost:4567/accounts/2f1fb7d9-e0b7-4bfa-9241-1bb7511152d9 ; echo $line;
{"id":"2f1fb7d9-e0b7-4bfa-9241-1bb7511152d9","ownerName":"user_1","balance":100}
- Transfer
$ curl -d "{ \
"fromAccountId":"2f1fb7d9-e0b7-4bfa-9241-1bb7511152d9", \
"toAccountId":"0e201bfe-7bbd-4362-a889-80991c1acf31", \
"amount": 20 \
}" \
-X POST http://localhost:4567/transactions/ ; echo $line;
- Check first account state
$ curl -X GET http://localhost:4567/accounts/2f1fb7d9-e0b7-4bfa-9241-1bb7511152d9 ; echo $line;
{"id":"2f1fb7d9-e0b7-4bfa-9241-1bb7511152d9","ownerName":"user_1","balance":80}
- Check second account state
$ curl -X GET http://localhost:4567/accounts/0e201bfe-7bbd-4362-a889-80991c1acf31 ; echo $line;
{"id":"0e201bfe-7bbd-4362-a889-80991c1acf31","ownerName":"user_1","balance":20}
gradle execute --debug-jvm