{"id":14986537,"url":"https://github.com/rapter1990/currencyexchange","last_synced_at":"2025-10-18T10:44:17.253Z","repository":{"id":164892725,"uuid":"640295656","full_name":"Rapter1990/currencyexchange","owner":"Rapter1990","description":"Currency Exchange API for Spring Boot","archived":false,"fork":false,"pushed_at":"2023-06-03T23:58:44.000Z","size":2068,"stargazers_count":10,"open_issues_count":0,"forks_count":5,"subscribers_count":2,"default_branch":"main","last_synced_at":"2025-03-25T18:45:26.929Z","etag":null,"topics":["actuator","actuators","cache","currency-exchange","docker","docker-compose","exception-handling","h2-database","intergration-test","java","junit","open-api","ratelimiter","resilience4j","resttemplate","spring-boot","spring-cache","stream","swagger"],"latest_commit_sha":null,"homepage":"","language":"Java","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Rapter1990.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"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":"2023-05-13T16:04:29.000Z","updated_at":"2024-11-16T14:27:55.000Z","dependencies_parsed_at":null,"dependency_job_id":"d9ed16d2-330c-4032-8787-5127d93c2179","html_url":"https://github.com/Rapter1990/currencyexchange","commit_stats":{"total_commits":58,"total_committers":1,"mean_commits":58.0,"dds":0.0,"last_synced_commit":"9134d659228a1a62e3f7e727ff4c2553bccc62a9"},"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rapter1990%2Fcurrencyexchange","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rapter1990%2Fcurrencyexchange/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rapter1990%2Fcurrencyexchange/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Rapter1990%2Fcurrencyexchange/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Rapter1990","download_url":"https://codeload.github.com/Rapter1990/currencyexchange/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":248482927,"owners_count":21111402,"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":["actuator","actuators","cache","currency-exchange","docker","docker-compose","exception-handling","h2-database","intergration-test","java","junit","open-api","ratelimiter","resilience4j","resttemplate","spring-boot","spring-cache","stream","swagger"],"created_at":"2024-09-24T14:13:06.244Z","updated_at":"2025-10-18T10:44:17.205Z","avatar_url":"https://github.com/Rapter1990.png","language":"Java","funding_links":[],"categories":[],"sub_categories":[],"readme":"# Spring Boot Currency Change API Example\n\n\u003cimg src=\"screenshots/spring_boot_currency_diagram.png\" alt=\"Main Information\" width=\"800\" height=\"400\"\u003e\n\n### 📖 Information\n\n\u003cul style=\"list-style-type:disc\"\u003e\n  \u003cli\u003eThe \u003cb\u003epurpose\u003c/b\u003e of the example is to handle with http get requests regarding currency exchange\u003c/li\u003e \n  \u003cli\u003eHere is the explanation of the currency exchange example  \n       \u003cul\u003e\n            \u003cli\u003eGet rates from the \u003cb\u003edatabase\u003c/b\u003e if the rate info is already inserted into \u003cb\u003edatabase\u003c/b\u003e\u003c/li\u003e\n            \u003cli\u003eGet rates from \u003cb\u003eapilayer.com\u003c/b\u003e and insert its value into \u003cb\u003edatabase\u003c/b\u003e and return the \u003cb\u003erate\u003c/b\u003e info\u003c/li\u003e\n            \u003cli\u003eGet exchange rates by exchange request info covering \u003cb\u003ebase currency\u003c/b\u003e, \u003cb\u003etarget currency\u003c/b\u003e and lastly \u003cb\u003eamount\u003c/b\u003e\u003c/li\u003e\n            \u003cli\u003eGet conversion by rate id\u003c/li\u003e\n            \u003cli\u003eGet all conversions between two dates named \u003cb\u003estart date\u003c/b\u003e and \u003cb\u003eend date\u003c/b\u003e \u003c/li\u003e\n       \u003c/ul\u003e\n  \u003c/li\u003e\n\u003c/ul\u003e\n\n### Explore Rest APIs\n\n\u003ctable style=\"width:100%\"\u003e\n  \u003ctr\u003e\n      \u003cth\u003eMethod\u003c/th\u003e\n      \u003cth\u003eUrl\u003c/th\u003e\n      \u003cth\u003eDescription\u003c/th\u003e\n      \u003cth\u003eValid Request Params\u003c/th\u003e\n      \u003cth\u003eValid Path Variable\u003c/th\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n      \u003ctd\u003eGET\u003c/td\u003e\n      \u003ctd\u003e/v1/rate\u003c/td\u003e\n      \u003ctd\u003eGet Rates\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"README.md#getrates\"\u003eInfo\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n      \u003ctd\u003eGET\u003c/td\u003e\n      \u003ctd\u003e/v1/exchange\u003c/td\u003e\n      \u003ctd\u003eGet Exchange Rates By Exchange Request Info\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"README.md#getexchangeratesbyexchangerequestinfo\"\u003eInfo\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n      \u003ctd\u003eGET\u003c/td\u003e\n      \u003ctd\u003egetconversion\u003c/td\u003e\n      \u003ctd\u003eGet Conversion By Id\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"README.md#getgetconversion\"\u003eInfo\u003c/a\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n  \u003ctr\u003e\n      \u003ctd\u003eGET\u003c/td\u003e\n      \u003ctd\u003egetconversionlist\u003c/td\u003e\n      \u003ctd\u003eGet Conversion List\u003c/td\u003e\n      \u003ctd\u003e\u003ca href=\"README.md#getconversionlist\"\u003eInfo\u003c/a\u003e\u003c/td\u003e\n      \u003ctd\u003e\u003c/td\u003e\n  \u003c/tr\u003e\n\u003c/table\u003e\n\n### Valid Request Params\n\n##### \u003ca id=\"getrates\"\u003e Get Rates\n```\n    http://localhost:8080/v1/rate?base=USD\u0026target=EUR,TRY\u0026date=2023-05-21\n    \n    base: USD\n    target: EUR,TRY\n    date: 2023-05-21\n```\n\n##### \u003ca id=\"getexchangeratesbyexchangerequestinfo\"\u003e Get Exchange Rates By Exchange Request Info\n```\n    http://localhost:8080/v1/exchange?base=USD\u0026target=EUR,TRY\u0026amount=100\n    \n    base: USD\n    target: EUR\n    amount: 100\n```\n\n##### \u003ca id=\"getexchangeratesbyexchangerequestinfo\"\u003e Get Exchange Rates By Exchange Request Info\n```\n    http://localhost:8080/v1/exchange?base=USD\u0026target=EUR,TRY\u0026amount=100\n    \n    base: USD\n    target: EUR\n    amount: 100\n```\n\n##### \u003ca id=\"getconversionlist\"\u003e Get Conversion List\n```\n    http://localhost:8080/v1/conversion?startDate=2023-05-20\u0026endDate=2023-05-22\n    \n    startDate: 2023-05-20\n    endDate: 2023-05-22\n```\n\n### Valid Path Variable\n\n##### \u003ca id=\"getconversion\"\u003e Get Conversion\n```\n    http://localhost:8080/v1/conversion/17d98364-e435-40d7-a941-af535fc95065\n```\n\n### Technologies\n\n---\n- Java 17\n- Spring Boot 3.0\n- Open API Documentation\n- Restful API\n- Spring Cache\n- Actuator\n- Resilience4j\n- Lombok\n- Maven\n- Junit5\n- Mockito\n- Integration Tests\n- Docker\n- Docker Compose\n\n### Prerequisites\n\n---\n- Get API KEY from apilayer.com\n- Maven or Docker\n---\n\n### Get API KEY from apilayer.com\n1 ) Open and register \u003cb\u003eapilayer.com\u003c/b\u003e\n\n2 ) Register \u003cb\u003eExchange Rates Data API\u003c/b\u003e and Get \u003cb\u003eAPI key\u003c/b\u003e\n\n\n### Create .env and Define API key\n---\n    EXCHANGE_API_API_KEY={YOUR_API_KEY}\n---\n\n### Docker Run\nThe application can be built and run by the `Docker` engine. The `Dockerfile` has multistage build, so you do not need to build and run separately.\n\nPlease follow directions shown below in order to build and run the application with Docker Compose file;\n\n```sh\n$ cd currencyexchange\n$ docker-compose up -d\n```\n\n---\n### Maven Run\nTo build and run the application with `Maven`, please follow the directions shown below;\n\n```sh\n$ cd currencyexchange\n$ mvn clean install\n$ mvn spring-boot:run\n```\n\n### Swagger\nYou can reach the swagger-ui through the link shown below\n```\n    http://localhost:8080/swagger-ui/index.html\n```\n\n### Actuator\nYou can reach the actuator through the link shown below\n```\n    http://localhost:8080/actuator\n```\n\n### Screenshots\n\n\u003cdetails\u003e\n\u003csummary\u003eClick here to show the screenshots of project\u003c/summary\u003e\n    \u003cp\u003e Figure 1 \u003c/p\u003e\n    \u003cimg src =\"screenshots/screenshot_1.PNG\"\u003e\n    \u003cp\u003e Figure 2 \u003c/p\u003e\n    \u003cimg src =\"screenshots/screenshot_2.PNG\"\u003e\n    \u003cp\u003e Figure 3 \u003c/p\u003e\n    \u003cimg src =\"screenshots/screenshot_3.PNG\"\u003e\n    \u003cp\u003e Figure 4 \u003c/p\u003e\n    \u003cimg src =\"screenshots/screenshot_4.PNG\"\u003e\n    \u003cp\u003e Figure 5 \u003c/p\u003e\n    \u003cimg src =\"screenshots/screenshot_5.PNG\"\u003e\n\u003c/details\u003e","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frapter1990%2Fcurrencyexchange","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frapter1990%2Fcurrencyexchange","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frapter1990%2Fcurrencyexchange/lists"}