Some of you might have a knowledge that one of the IT company has created a technical test. For recruitment process of course. I decided to take up this challenge. Below you can find a solution of it. I posted this only for educational purposes.
The projects is splited into two modules : currencyfair-gateway and currencyfair-consumer.
The first module currencyfair-gateway is responsible for exposing endpoint used for retriving from user request in JSON format. Request is validated due to it's fields. If request is not valid user will receive detailed information about which fields are incorrect. Otherwise request will be forwarded to message broker RabbitMQ.
The second module currencyfair-consumer fetches messages from message broker RabbitMQ to process it via Data Processor. Once it's done the processed data are broadcasted to frontend.
Application was developed using of course Java and Spring Framework. Those above two modules were connected via message broker RabbitMQ. Below you can see what is the overall architecture of this application. Other used libraries :
- Spring Beans – 4.0.1.RELEASE
- Spring Tx – 4.0.1.RELEASE
- Spring Context – 4.0.1.RELEASE
- Spring Context Support – 4.0.1.RELEASE
- Spring Aop – 4.0.1.RELEASE
- Spring Aspects - 4.0.1.RELEASE
- Spring Web – 4.0.1.RELEASE
- Spring Web MVC – 4.0.1.RELEASE
- Spring AMQP - 1.4.5.RELEASE
- Spring Erlang - 1.4.5.RELEASE
- Spring Rabbit - 1.4.5.RELEASE
- Spring WebSocket - 4.0.1.RELEASE
- Spring Messaging - 4.0.1.RELEASE
- Spring Integration - 4.1.0.RELEASE
- Spring Integration AMQP - 4.1.0.RELEASE
- Spring Integration Stream - 4.1.0.RELEASE
- Spring Test - 4.0.1.RELEASE
- Jackson Core - 2.5.0
- Jackson Databind - 2.5.0
- Jackson Annotations - 2.5.0
- Jackson Mapper ASL – 1.9.10
- Gson – 2.2.4
- Guava - 18.0
- Unirest - 1.4.5
- Javax Servlet API – 3.1.0
- JSTL – 1.2
- SLF4J - 1.7.8
- Commons Logging - 1.2
- JUnit - 4.10
- Mockito - 1.9.5
- Hamcrest - 1.3
- Highcharts - 4.1.5
- Twitter Bootstrap - 3.3.4
- SockJS - 0.3.4
Architecture |
Endpoint
Endpoint consumes JSON data on context /currencyfair-gateway/endpoint like below :{ "userId": "12345", "currencyFrom": "EUR", "currencyTo": "GBP", "amountSell": 1000, "amountBuy": 747.10, "rate": 0.7471, "timePlaced" : "24-JAN-15 10:27:44", "originatingCountry" : "FR" }
Message is validated under empty of above fields, timePlaced format (dd-MMM-yy hh:mm:ss), existing of currencyFrom and currencyTo in ISO 4217, existing of originatinCountry in ISO 3166-1 and by calculations of amountSell, amountBuy and rate.
Data processor
GraphBroker
Frontend
References : [1] https://github.com/GarciaPL/CurrencyFair