Необходимо реализовать:
- Скрипт получения ЦБ-курсов валют:
- скрипт получает значение курсов с http://www.cbr.ru/scripts/XML_daily.asp для заданного списка валют;
- для каждой даты и валюты записывает полученные значения в базу данных;
- предполагается, что скрипт запускается с определенной периодичностью и добавляет/обновляет значение курсов валют на каждый день.
- Виджет, выводящий ЦБ-курсы валют на текущий день:
- виджет показывает ЦБ -курсы валют;
- для каждой валюты должно быть ее текущее значение и изменение по отношению к предыдущему дню (показывать либо стрелкой «вверх», «вниз» либо выделять цветом – «красный» - курс упал, «зеленый» - курс вырос);
- так как значение курсов валют может изменяться в течение дня, сделать автоматическое обновление этих значений в виджете с заданным интервалом.
- Должны быть следующие настройки:
- список валют, курсы которых необходимо получать с ЦБ;
- список валют, которые необходимо выводить в виджете;
- интервал обновления содержимого виджета.
Бэк получающий значения курсов для заданного списка валют, проверяющее вырос или упал ли курс по сравнению с предыдущим значением курса. Виджет отображающий эти данные.
- Бэкэнд на Laravel, который посылает запрос на endpoint цб, парсит xml и записывает необходимые данные в базу данных.
app
├── Console
│ └── Kernel.php -- запуск заданий(Jobs) на обновление данных,
│ полученных с ЦБ через определенный промежуток времени
├── Http
│ ├── Controllers
│ │ └── Api
│ │ └── MainController.php
│ └── Resources -- возвращаемые ресурсы фронту
│ ├── CurrenciesCollection.php
│ └── CurrencyResource.php
├── Jobs -- задания на обновление данных и другие
│ ├── FetchRatesToXmlFileJob.php
│ └── UpdateRatesJob.php
├── Providers
│ └── AppServiceProvider.php -- биндинг зависимостей
├── Repositories -- для получения данных
│ ├── CurrencyRepository.php
├── Services -- для манипулирования данными, бизнес логика
│ └── Currency
│ └── CurrencyService.php
├── ThirdParty -- вспомогательные классы ЦБР, XMLService
│ ├── CBR.php
│ └── XmlService.php
│
config
└── currencies.php -- файл конфигурации
- Фронтэнд - виджет на нативном js, который посылает запросы к нашему бэкэнду, полученные данные выводит в нужном виде.
widget
└── js
├── config.js -- конфигурация
├── includes
│ ├── helpers.js
│ └── mainFunctions.js -- основные функции
└── index.js -- входной скрипт
Бэкэнд: В config/currencies.php находится массив с конфигурируемыми параметрами:
xml_filename
- название xml файла, в который будем помещать данные, полученные от цб;currency_codes
- массив кодов валют, которые будем брать с xml файла и помещать в базу данных. Например:['EUR', 'USD', 'CAD', 'BYN', ...]
или['*']
;cbr_endpoint
- эндпоинт цб, взят из задания.
Фронтэнд: В widget/js/config.js находится массив с конфигурируемыми параметрами:
currencies
- массив кодов валют, которые будем получить с бэкэнда;backendEndpoint
- эндпоинт бэкэнда, который будет получать массив необходимых виджету валют(из предыдущего параметра), и отдавать их;refreshTimer
- интервал обновления содержимого виджета, в секундах.
- Клонируем репозиторий, устанавливаем зависимости с помощью composer
git clone https://github.com/vladimirbalin/currencies
cd currencies
composer install
- Создаём базу данных, устанавливаем соответсвующие вашей базе параметры в .env:
DB_CONNECTION=mysql
DB_HOST=127.0.0.1
DB_PORT=3306
DB_DATABASE=currencies
DB_USERNAME=
DB_PASSWORD=
- Проводим миграции:
php artisan migrate
- Запуск планировщика:
php artisan schedule:work
- Запуск обработчика очередей:
php artisan queue:work
GET /api/currencies
Parameter | Type | Description |
---|---|---|
currencies |
array |
Required. Коды валют |
Например: api/currencies?currencies[]=EUR¤cies[]=USD¤cies[]=BYN¤cies[]=CAD
Возвращает JSON вида:
{
"currencies": [
{
"char_code":"BYN",
"value":"25.7044",
"date":"2022-12-31",
"nominal":1,
"status":"rateDown"
},
...
]
}