About this project
it-programming / web-development
The task is to build a currency exchange rate api that will save a set of currency rate amounts with the eur base currency into a mysql database and includes redis cache not to trigger third party api nor the database all the time a request is triggered. The following requirements must be met:
- Build a Symfony 5 project with the following dependencies:
- Doctrine (with migrations)
- GuzzleHTTP (for making HTTP requests)
- Create a console command that will fetch the currency exchange rates for a given set of currencies from the Open Exchange Rates API. The command should have the following signature:
`php bin/console app:currency:rates [base_currency] [target_currency_1] [target_currency_2] ... [Target_currency_n]`
The command should make an http request to the api to fetch the exchange rates for the given currencies, save the rates into a mysql database with the eur base currency and store the rates in redis. This must be set as a cron job to be triggered daily at 1am.
- Create an endpoint that will return the exchange rates for a given set of currencies. The endpoint should have the following signature:
The endpoint should first check Redis for the requested rates. If the rates are not in Redis, it should fetch them from the MySQL Database, store them in Redis and return the rates. If the rates are in Redis, it should return the rates directly from Redis.
- Write unit tests to verify the functionality of the console command and the endpoint.
- Use doctrine migrations to manage database schema changes.
- Push your changes to a GitHub account by creating a timeline of git commits.
## Evaluation Criteria
- Code quality and organization
- Correct use of Symfony components and best practices
- Correct implementation of the API requirements
- Unit tests that verify the functionality of the console command and the endpoint
- Effective use of git and GitHub
Category IT & Programming
Subcategory Web development
What is the scope of the project? Small change or bug
Is this a project or a position? Project
I currently have I have specifications
Required availability As needed
Roles needed Developer
Delivery term: Not specified