Интеграция Drupal с внешней SQLite БД (Production Monitor)
Цель тестового задания
Реализовать Drupal-модуль, который выступает в роли моста между:
внешней SQLite БД (production monitor),
и базой данных Drupal.
Модуль должен:
читать данные об изделии из SQLite,
выполнять расчёты на стороне PHP,
сохранять агрегированную информацию в Drupal,
выводить таблицу операций изделия.
❗ Задание является частью будущего переноса всей системы на Drupal.
Важно не только «чтобы работало», но и как это реализовано.
Общие условия
CMS: Drupal 10 или 11
Источник данных: SQLite (workshop_bot.db)
Дизайн / верстка: не важны
Twig: только отображение, без логики
Фокус: архитектура, чистота кода, расчёты
Архитектура подключения к SQLite
Модуль должен получать данные из внешней SQLite БД, используя:
Drupal Database API;
централизованное подключение (не в контроллере).
❌ Запрещено:
прямые вызовы PDO в контроллерах;
sqlite_open, new PDO() в бизнес-логике;
SQL в Twig.
Модуль
Название: factory_bridge
Структура ожидаемо включает:
сервис для работы с SQLite;
контроллер (или блок) для вывода данных;
при необходимости — entity или node.
Данные, используемые в тестовом задании
Используемые таблицы SQLite (обязательно):
order_items
assigned_tasks
work_sessions
❌ Остальные таблицы, описанные в DATABASE_SCHEMA.md,
в рамках тестового задания использовать не требуется.
Алгоритмы расчёта (обязательные)
Для выбранного изделия (order_items.internal_id):
1. Операции
Операция = одна запись из assigned_tasks, связанная с изделием.
2. НЧ План
Берётся напрямую из:
assigned_tasks.applied_norm_hours
3. Ч Факт
Сумма длительности всех рабочих сессий операции:
Σ (work_sessions.end_time - work_sessions.start_time)
если end_time = NULL — сессия считается активной;
расчёт выполняется на стороне PHP.
4. Дельта
Δ = План – Факт
Вывод данных
Реализовать страницу или блок, который выводит таблицу операций изделия.
Минимальный набор колонок:
Код / Название операции
НЧ План
Ч Факт
Δ (дельта)
Скриншот текущей реализации (не на Drupal) приложен только как пример структуры данных,
визуальное совпадение не требуется.
Сохранение в Drupal
При импорте данных:
создать или обновить сущность в Drupal:
Node типа «Изделие» или
Custom Entity (по выбору разработчика).
Сохранить минимум:
название изделия,
артикул / код,
статус (произвольная логика допустима).
Критерии приёмки (на что смотрим)
✔ Drupal Coding Standards
✔ Использование Services и Dependency Injection
✔ Отсутствие прямых SQL-инъекций в БД Drupal
✔ Корректная работа с датами и таймзонами (ISO)
✔ Вся бизнес-логика в PHP, не в Twig
✔ Читаемость и структура кода
Формат сдачи
Git-репозиторий или
архив с модулем factory_bridge.
README приветствуется, но не обязателен.
