Сервис демонстрирует пример работы с API cbr.ru
В таблице orders представлены заказы и их стоимость в разных валютах. В таблице order_passengers список пассажиров для каждого заказа.
-
Необходимо с сайта ЦБ РФ получить актуальный курс валют и вывести в браузер по GET-запросу http://localhost:3000/orders таблицу заказов: Номер заказа | Локатор | Дата последнего обновления | Стоимость в рублях | Стоимость в валюте заказа | Количество пассажиров Причем значение в поле локатор ссылка вида: http://localhost:3000/order/#ЛОКАТОР#
-
При переходе по ссылке из поля локатор показываем табличку со списком пассажиров Номер заказа | Локатор | Фамилия | Имя Так же на данной странице должна быть возможность вернуться к списоку заказов.
- в качестве config настройки приложения
- в качестве db выбрана sqlite
- в dao находится модули обеспечивающие доступ к БД
- в controllers находятся контроллеры реализующие логику приложения
- в routes описание роутинга приложения
- в views для фронтовой части использую Handlebars engine
- запускаю миграции
- инициализирую БД
- обновляю состояния заказов перед запуском системы
- запускаю обновление заказов по таймеру
- стартую сервер
Примечание: Я использую временную таблицу tmp_orders_state, которая инициализируется перед стартом сервера и далее пересчитывается по таймеру (параметр timeUpdateOrderState в конфиге). Это позволяет не нагружать сервер расчетами не пересчитывать на каждый запрос "/orders", т.к. в нем присутствуют обращения к внешнем ресурсам (www.cbr.ru) и расчет курса для каждой строки.
При разработке допущены некоторые упрощения, так как это демо-проект. Если готовил бы приложение для прода, то я бы еще добавил следующее:
- использовать ORM (sequelize),
- использовать memcached. Кеширование на уровне БД и использование temporary_table, конечно снимает проблему нагрузки на сервер, но в проде лучше использовать все-таки memcached.
- Загружать bootstrap и скрипты на фронте из локальной директории, сейчас для демо используется CDN
- Вместо таймера для обновления заказов, можно использовать воркеры или програмные кроны
$ sudo npm run test
выполнить тесты$ sudo npm run coverage
посчитать покрытие кода тестами
Список заказов:
Список пассажиров:
тесты:
Покрытие тестами: