- PHP 7.0+
- MySQL
load-files
- примеры файлов, с которыми работает приложениеschema
-.sql
файлы с таблицами, которые использует приложениеsources
- исходники приложения
Изучение остальных подробностей мы предоставляем лично вам :)
Имеется абстрактное приложение, задачей которого является парсинг структурированных CSV файлов с загрузкой содержимого в базу данных.
Входная точка приложения - файл sources/cli.php
.
Пример выполнения:
$ php sources/cli.php load-files/market.eu.20180227
В результате выполнения значения из файла load-files/market.eu.20180227
будут загружены в таблицу market_data
по порядку, описанному в таблице соответствия:
DB column | CSV column[index] |
---|---|
id_value | 0 |
price | 1 |
is_noon | 5 |
update_data | current date |
Задание разбито на две задачи, которые следует выполнять по порядку:
- Починить приложение
- Дополнить приложение новым функционалом
Это задание справедливо только для случая выполнения скрипта с файлом
market.eu.%Ymd%
- Приложение из
sources
- База данных с таблицей
market_data
из файлаschema/market_data.sql
- Файл
market.eu.20180227
Приветствуется рефакторинг частей кода, которые вызывают у вас сомнения
Предположим, что произошли какие-либо невероятные события, после чего приложение перестало функционировать должным образом. Скрипт отрабатывает, но в базе данных новые записи не появляются.
Наши наблюдения:
- Скрипт отрабатывает без ошибок
- В базе данных нет значений с загружаемого файла
- Лог файл не содержит сообщений типа
[WARN]
/[DEBUG]
, значит, все отработало верно - Информация в лог файле перезаписывается с каждым запуском скрипта, ранее всегда дописывалась
Необходимо починить скрипт:
- Значения из файла
market.eu.20180227
в результате выполнения скрипта должны быть успешно загруженны в базу данных - Ошибки должны быть верно обработаны
- Логгер должен записывать все типы ошибок, при этом дописывая в лог-файл, а не перезаписывая его
Это задание справедливо для случаев выполнения скрипта и с
market.eu.%Ymd%
и сmarket.us.%Ymd%
файлами
К этому заданию стоит приступать после выполнения Задания №1 с изменениями, которые были внесены вами
- Обновленная вами версия приложения из
sources
- База данных с таблицей
market_data
из файлаschema/market_data.sql
- База данных с таблицей
markets
из файлаschema/markets.sql
, а так же значениями для таблицы из того же скрипта - Файлы
market.eu.20180227
иmarket.us.20180228
Появились новые требования к приложению. Необходимо:
- Обрабатывать новый тип файлов -
market.us.%Ymd%
. Для нового типа файла есть важная особенность - мы должны загружатьid_value
для таблицыmarket_data
не из первой колонки, как дляmarket.eu.
файлов, а с последней - Использовать новую таблицу -
markets
для валидации сохраняемых значений из загружаемого файла. Нужно добавить новый слой валидации. В процессе парсинга файла проверять, есть ли в таблицеmarkets
значениеid_value
сопоставимое с тем, что мы загружаем для поляid_value
таблицыmarket_data
. Если нет - строчку пропускаем, и наоборот - Для поля
update_date
таблицыmarket_data
брать дату из названия файла - market.us.%Ymd% формата Год-месяц-день. Например, для значений из файлаmarket.eu.20180227
полеupdate_date
таблицыmarket_data
должно быть2018-02-27
- Форматировать цену для поля
price
таблицыmarket_data
. Сейчас значения из загружаемого файла для поляprice
таблицыmarket_data
приходят как000*значение*
, например -0003691
. Нужно добавить форматирование (на уровне PHP) убирающие нули из начала значения. - Писать в лог количество строк, которое было загружено из файла
Обновленная таблица соответствия:
DB column | CSV column[index] |
---|---|
id_value | 0 для market.eu. и 6 для market.us. |
price | 1 |
is_noon | 5 |
update_date | date с названия файла |
market_id | markets.market_id для соответствующего id_value |