Модуль состоит из двух частей
- Парсер и сохранение информации в БД
 - Админка ассоциации данных
 
Для упрощения развёртывания используется vagrant. Система контроля версий Git.
- Консольные команды сущностей разделены, если это возможно. Категории, страницы продукта, список файлов - это три разные консольные команды
 - Повторный запуск команды не приводит к удалению информации, а лишь обновляет её. Особенно это важно по хранению сущностей основного проекта
 - Все данные получаемые от производителя кэшируется "как есть", это позволяет перенастраивать парсер без необходимости повторной закачки данных
 - Чтобы парсинг данных можно было легко перенастраивать для разбора используется DOM модель документа
 
./yii parser-amd/parse/tree
./yii parser-amd/parse/files
./yii parser-amd/parse/operation-system
- Реализовать ассоциации сущностей: типы оборудования, операционные системы, типы файлов, серии продукта, продукты
 - Типы оборудования и серии на выводе сводить к дереву
 
- Связка с основным основного проекта сохраняется внутри сущности парсера
 - Все таблицы должны иметь поле createdAt
 - У всех таблиц должен быть первичный ключ
 - Если данные уникальные, соответствующий индекс должен быть создан
 
- Извлекать нужно всю доступную информацию по серии, продукту и файлу
 - Если описание предоставлено в html его нужно сохранить с оригинальным форматированием
 
- Ошибки приложения явные и ориентированные на человека
 
- Нужно следовать примеру кода данным в скелетоне. camelCase, отступ четыре пробела, единственное число для сущностей и т.д.
 - Семантическое разделение данных и переменных производителя и основного проекта производится префиксами 
source,real. 
- php >= 7.2
 - mariadb >= 10.2
 - Yii > 2.15.0
 
- Тестовый рабочий код на примере парсера AMD
 - Организация и подключение модуля Yii2
 - Обертка для работы с DOM делающая работу с DOM удобнее. https://github.com/bezdelnique/parser-toolbox
 - Все взаимодействие с источником данных вынесено в отдельный класс: 
helpers/Downloader.php - Реализация массовых вставок в БД с сохранением данных при помощи класса 
EntitiyBulk - В админке реализован ассоциатор для дерева категорий и остальных сущностей
 
mkdir parser-skeleton
cd parser-skeleton
git archive [email protected]:bezdelnique/parser-skeleton.git master --format=tar | tar -xv
vagrant up
vagrant ssh
mysql -uroot -Dparser -f < /app/vagrant/mysql/parser_skeleton.sql  
Создание проекта на базе скелетона
mkdir parser-amd
cd parser-amd
git archive [email protected]:bezdelnique/parser-skeleton.git master --format=tar | tar -xv
mv parser/modules/skeleton parser/modules/amd
find parser/modules/amd -type f -print0 | xargs -0 sed -i 's/skeleton/amd/g'
find parser/modules/amd -type f -print0 | xargs -0 sed -i 's/Skeleton/Amd/g'
find common/config/main.php -type f -print0 | xargs -0 sed -i 's/skeleton/amd/g'
find common/config/main.php -type f -print0 | xargs -0 sed -i 's/Skeleton/Amd/g'
find vagrant -type f -print0 | xargs -0 sed -i 's/skeleton/amd/g'
find appbackend/views/layouts/left.php -type f -print0 | xargs -0 sed -i 's/skeleton/amd/g'
git init
git add --all
git commit
git remote add origin [email protected]:bezdelnique/parser-amd.git
git push -u origin master
vagrant up
В этой точки документации проект доступен для работы.
SSH
vagrant ssh
ssh [email protected]
Веб
База данных
192.168.83.137:3306
user: root
pass: 12345
db: parser
Консольные команды парсера
./yii parser-skeleton/parse/tree
./yii parser-skeleton/parse/file-list
./yii parser-skeleton/parse/operation-system
Внимание! Внутри VM, в том числе и в конфигурации приложения, используется root без пароля.
Директория проекта на сервере /app
Модуль подключается в файле common/config/main.php в секциях bootstrap и modules.
tree -d parser
├── components
│   └── AssocResourceReal
├── entities
│   └── FakeHardware
│       └── Series
├── helpers
│   └── Sys
└── modules
    ├── _common
    │   └── views
    │       ├── assoc
    │       └── components
    ├── migrations
    └── amd
        ├── commands
        ├── controllers
        │   └── AssocActions
        ├── __docs
        ├── entities
        │   ├── HardwareFile
        │   ├── HardwareRelFile
        │   ├── HardwareTree
        │   └── OperationSystem
        ├── helpers
        └── views
            ├── assoc
            ├── default
            └── testing
- Проверить конфигурацию модуля 
parser/modules/amd/config.php - Сделать дамп итоговой БД: 
parser/modules/amd/__docs/database-prod.sql - Написать список доступных команд 
parser/modules/amd/__docs/commands.md - Закоммитить изменения в Git
 
- Команды отрабатывают без сбоев при первичном запуске (БД пустая)
 - Команды отрабатывают без сбоев при вторичном запуске
 - Команды сохраняют данные о связях с основным проектом
 
- Новые связи создаются, а старые сохраняются
 - Новые сущности серий и продуктов создаются и связка сохраняется
 - Удаление ассоциации работает
 
- Указать какие хелперы вне модуля были модифицированы