{"id":15069090,"url":"https://github.com/mfvanek/money-transfer-rest-api","last_synced_at":"2025-10-05T06:31:15.977Z","repository":{"id":42203028,"uuid":"162895864","full_name":"mfvanek/money-transfer-rest-api","owner":"mfvanek","description":"Simple implementation of RESTful API for money transfers between accounts","archived":true,"fork":false,"pushed_at":"2024-08-29T08:09:12.000Z","size":197,"stargazers_count":17,"open_issues_count":3,"forks_count":12,"subscribers_count":3,"default_branch":"master","last_synced_at":"2025-01-21T09:54:09.439Z","etag":null,"topics":["concurrency","http-client","java","java-11","junit5","lombok","maven","money-transfer","rest-api","restful-api","sparkjava"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/mfvanek.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2018-12-23T14:04:36.000Z","updated_at":"2025-01-07T15:58:50.000Z","dependencies_parsed_at":"2023-01-25T14:46:03.475Z","dependency_job_id":"680d697c-ef26-478b-8edb-5762e0cf565d","html_url":"https://github.com/mfvanek/money-transfer-rest-api","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mfvanek%2Fmoney-transfer-rest-api","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mfvanek%2Fmoney-transfer-rest-api/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mfvanek%2Fmoney-transfer-rest-api/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/mfvanek%2Fmoney-transfer-rest-api/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/mfvanek","download_url":"https://codeload.github.com/mfvanek/money-transfer-rest-api/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":235370461,"owners_count":18979093,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["concurrency","http-client","java","java-11","junit5","lombok","maven","money-transfer","rest-api","restful-api","sparkjava"],"created_at":"2024-09-25T01:40:25.946Z","updated_at":"2025-10-05T06:31:15.605Z","avatar_url":"https://github.com/mfvanek.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Simple implementation of RESTful API for money transfers between accounts.\n\n[![Java CI](https://github.com/mfvanek/money-transfer-rest-api/actions/workflows/tests.yml/badge.svg)](https://github.com/mfvanek/money-transfer-rest-api/actions/workflows/tests.yml)\n[![codecov](https://codecov.io/gh/mfvanek/money-transfer-rest-api/branch/master/graph/badge.svg?token=M07PR66QAP)](https://codecov.io/gh/mfvanek/money-transfer-rest-api)\n\n## Important\n1. Should be rewritten for using of JAXRS\n2. Replace **Hand-written in-memory data storage** with H2 or Embedded PostgreSQL\n3. Add Swagger for API documentation\n\n## Task\nDesign and implement a RESTful API (including data model and the backing implementation) for money transfers between accounts.\n\n### Explicit requirements:\n1. You can use Java, Scala or Kotlin.\n2. Keep it simple and to the point (e.g. no need to implement any authentication).\n3. Assume the API is invoked by multiple systems and services on behalf of end users.\n4. You can use frameworks/libraries if you like (except Spring), but don't forget about requirement #2 – keep it simple and avoid heavy frameworks.\n5. The datastore should run in-memory for the sake of this test.\n6. The final result should be executable as a standalone program (should not require a pre-installed container/server).\n7. Demonstrate with tests that the API works as expected.\n\n## Technology stack\n- Java 11\n- [Maven](https://maven.apache.org/)\n- [Spark Framework](http://sparkjava.com) (with embedded Jetty)\n- [Logback](https://logback.qos.ch)\n- [Lombok](https://projectlombok.org)\n- [google/gson](https://github.com/google/gson)\n- **Hand-written in-memory data storage using concurrency utilities**\n- [JUnit 5](https://junit.org/junit5/)\n- [Apache HttpClient](https://hc.apache.org/index.html) (for unit testing)\n\n## How to run\n```shell\njava -jar \"./rest-api-app/target/rest-api-app-1.3.0.jar\"\n```\n\n## Available services\n- GET [http://localhost:9999/parties?limit=10](http://localhost:9999/parties?limit=10)\n- GET [http://localhost:9999/parties/1](http://localhost:9999/parties/1)\n- GET [http://localhost:9999/parties/1/accounts](http://localhost:9999/parties/1/accounts)\n- GET [http://localhost:9999/accounts?limit=10](http://localhost:9999/accounts?limit=10)\n- GET [http://localhost:9999/accounts/1](http://localhost:9999/accounts/1)\n- GET [http://localhost:9999/accounts/1/transactions?limit=100](http://localhost:9999/accounts/1/transactions?limit=100)\n- GET [http://localhost:9999/transactions?limit=100](http://localhost:9999/transactions?limit=100)\n- GET [http://localhost:9999/transactions/1](http://localhost:9999/transactions/1)\n- POST [http://localhost:9999/transactions](http://localhost:9999/transactions)\n\n### Pagination\n- [http://localhost:9999/parties?limit=10](http://localhost:9999/parties?limit=10)\n- [http://localhost:9999/parties?page=2\u0026limit=20](http://localhost:9999/parties?page=2\u0026limit=20)\n- [http://localhost:9999/accounts/1/transactions?limit=100](http://localhost:9999/accounts/1/transactions?limit=100)\n\n## Http status\n- 200 OK\n- 400 Bad request\n- 404 Not found\n\n## Notes\n- Using Russian bank accounts\n- Decided to ignore topics of **currency conversions** and **multi-currency operations**\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmfvanek%2Fmoney-transfer-rest-api","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fmfvanek%2Fmoney-transfer-rest-api","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fmfvanek%2Fmoney-transfer-rest-api/lists"}