Go Lang developer test
Create a microservice that collect data from a cryptocompare using its API for example (https://min-api.cryptocompare.com/data/pricemultifull?fsyms=BTC&tsyms=USD,EUR)
For instance:
"fsyms" => ["BTC", "XRP", "ETH", "BCH", "EOS", "LTC", "XMR", "DASH"],
"tsyms" => ["USD", "EUR", "GBP", "JPY", "RUR"],
Struct of response currency
{
CHANGE24HOUR string
CHANGEPCT24HOUR string
OPEN24HOUR string
VOLUME24HOUR string
VOLUME24HOURTO string
LOW24HOUR string
HIGH24HOUR string
PRICE string
SUPPLY string
MKTCAP string
}
Currency pairs should be configurable.
Mysql parameters should be configurable.
Service must store data to mysql by sheduler (rawjson is ok).
Service must work in background.
If cryptocompare is non accessible service must return data from database via own API.
Data in response must be fresh (realtime). 2-3 minutes discrepancy is ok.
Using websockets is a plus. Clean architecture is a plus. Service scalability is a plus.
APPENDIX:
Example of HTTP request:
GET service/price?fsyms=BTC&tsyms=USD
Example of response:
{
"RAW": {
"BTC": {
"USD": {
"CHANGE24HOUR": -13.25,
"CHANGEPCT24HOUR": -0.18152873223073468,
"OPEN24HOUR": 7299.12,
"VOLUME24HOUR": 47600.120073200706,
"VOLUME24HOURTO": 348033250.4911315,
"LOW24HOUR": 7197.22,
"HIGH24HOUR": 7426.64,
"PRICE": 7285.87,
"LASTUPDATE": 1586433196,
"SUPPLY": 18313937,
"MKTCAP": 133432964170.19
}
}
},
"DISPLAY": {
"BTC": {
"USD": {
"CHANGE24HOUR": "$ -13.25",
"CHANGEPCT24HOUR": "-0.18",
"OPEN24HOUR": "$ 7,299.12",
"VOLUME24HOUR": "Ƀ 47,600.1",
"VOLUME24HOURTO": "$ 348,033,250.5",
"HIGH24HOUR": "$ 7,426.64",
"PRICE": "$ 7,285.87",
"FROMSYMBOL": "Ƀ",
"TOSYMBOL": "$",
"LASTUPDATE": "Just now",
"SUPPLY": "Ƀ 18,313,937.0",
"MKTCAP": "$ 133.43 B"
}
}
}
}
Example of WS request:
WS service/price
{ "fsyms": "DASH", "tsyms": "RUR" }