Завершили один из тех проектов, которые начинаются со слов «надо немного обновить старый сайт», а заканчиваются практически полной заменой платформы.
MKDevelop - B2B-каталог электронных компонентов и радиодеталей - много лет работал на Drupal 6. Сайт продолжал выполнять свои задачи, но поддерживать и развивать проект на настолько старой платформе становилось всё сложнее. Поэтому вместо очередного обновления legacy-кода мы постепенно перенесли проект на современный стек.
В результате старый Drupal-сайт фактически был заменён новым приложением на Laravel, при этом постарались сохранить накопленные за годы данные, привычную структуру каталога и старые адреса страниц.
Что перенесли
На момент миграции основной каталог содержал около 26,5 тысячи складских позиций в 39 разделах.
Отдельная задача — архивный каталог товаров «под заказ». Из старой Drupal-базы было перенесено более 225 тысяч позиций от нескольких поставщиков и из исторических выгрузок.
Чтобы переход не превращался в полный обрыв старого сайта, для прежних адресов групп и карточек товаров были добавлены 301-редиректы, а часть информационного контента также была перенесена из Drupal.
Новый каталог
Одновременно с миграцией довольно сильно переработали сам принцип работы сайта.
Теперь каталог автоматически обновляется, поддерживает актуальные остатки, розничные и оптовые цены, поиск по названию и артикулу, позиции со склада и товары «под заказ».
Появились нормальная корзина, оформление заявок, личный кабинет, история и статусы заказов, реквизиты компаний, счета PDF, избранное и отдельная административная часть для управления каталогом и заявками.
Поиск тоже пришлось делать с учётом специфики каталога компонентов: например, запрос db9f должен находить DB-9F, а случайно набранный артикул в неправильной раскладке клавиатуры — по возможности всё равно приводить пользователя к нужной позиции.

От сайта к API
Но одной заменой Drupal задача в итоге не ограничилась.
После переноса основной логики появился REST API, через который с тем же каталогом, аккаунтами и заявками теперь может работать не только веб-сайт.
Это позволило не делать мобильное приложение отдельным проектом со своей бизнес-логикой и своей базой данных. Сайт и мобильный клиент используют одну серверную часть.
Мобильное приложение MKDevelop
Параллельно было разработано приложение MKDevelop на Flutter.
В нём доступны основные сценарии B2B-каталога:
каталог и поиск электронных компонентов;
карточки товаров, цены и наличие;
избранное;
корзина с сохранением и синхронизацией;
оформление заявок;
профиль и реквизиты компании;
история и статусы заявок;
просмотр доступных счетов PDF;
запрос товаров из каталога «под заказ».

Приложение уже опубликовано в RuStore.
В итоге
Получилась не просто смена CMS и не редизайн старого сайта.
За старым доменом теперь работает фактически новая система: современный B2B-каталог с автоматическим импортом данных, API, личным кабинетом и мобильным клиентом.
При этом большая часть накопленных за годы товарных данных и старых URL была сохранена.
Для меня этот проект ещё и хороший пример того, как сейчас можно подходить к legacy-системам. Не обязательно бесконечно обновлять проект поколение за поколением и пытаться довести Drupal 6 до актуальной версии. Иногда рациональнее оставить от старой системы данные и бизнес-логику, которые действительно имеют ценность, а клиентскую и серверную часть собрать заново на современном стеке.
Следующий этап - уже не миграция, а обычное развитие продукта: улучшение каталога и поиска, дальнейшая синхронизация сайта и приложения и новые сценарии для постоянных B2B-клиентов.
И да, если раньше за подобный проект можно было заплатить несколько миллионов рублей минимум, а с учетом разработки мобильного приложения и гораздо больше, то сейчас реализация возможна за гораздо меньшие суммы, начиная от 300-400 тыс. руб. при наличии четкого представления что именно вы хотите получить в итоге в минимально рабочей версии проекта (MVP).
