Разработка интернет платформы для крупнейшей сети аптек
Сеть аптек «HEXAL» — это оптимальное слияние лучших традиций европейского и российского фармацевтического бизнеса. Первая аптека с торговой маркой «HEXAL» открылась в 2002 году в результате решения о сотрудничестве крупнейшего предприятия фармацевтической промышленности Германии «HexalAG» и российской компании «Фармадент».«Hexal AG» — один из мировых лидеров по производству дженериковых препаратов. ООО «Фармадент» — торговая компания с многолетним опытом работы на российском фармрынке, являющаяся официальным держателем лицензии с правом использования логотипа и товарного знака «HEXAL».
Задачи проекта
Перед нами встала задача по разработке с нуля крупного интернет магазина для фармацевтического бизнеса. Необходимо было спроектировать техническое задание, предложить стек технологий и архитектуру работы сервиса в целом. Помимо этого, задача заключалась в разработке качественного UI, быстрого поиска, фильтрации товаров и клиентский мессенджер для мгновенной связи.
CRM
Мы разработали полноценную CRM с возможностью создавать каталоги и продукцию, задавать характеристики для товаров, писать статьи. CRM имеет систему управления ролями менеджеров.
Так как одновременно работают сразу несколько человек с заказами, мы разработали приложение для мгновенного отображение заказов в режиме реального времени. Для этого мы использовали технологический стек Socket.io, Express.js и Node.js. Express был использован как серверная платформа для веб-приложения Node, а библиотека Socket.io была использована для обмена данными в реальном времени.
Быстрый полнотекстовый поиск
Для поиска по товарам был выбран модуль ElasticSearch. Это очень мощный инструмент с основными сценариями использования, включая полнотекстовый поиск, журнал в режиме реального времени и анализ безопасности. С помощью Elasticsearch мы поместили документы в индексы, которые затем запросили для получения данных. Индекс похож на таблицу в реляционной базе данных; это хранилище, где мы помещаем набор полей, которые позже могут быть запрошены. Идея заключается в том, чтобы создать приложение для товаров, используя общедоступный набор данных из более чем 25 тысяч позиций. Каждый товар имеет название, артикул, описание, характеристики: страна производитель, состав, и.т.д. Чтобы сделать нашу модель индексируемой Elasticsearch, мы настроили две вещи: первое, это подготовили сопоставление (которое сигнализирует Elasticsearch о нашей структуре данных), второе: построили поисковый запрос.
Фасетный фильтр
Основная задача фильтра - это выбор нескольких интересующих его характеристик товара, помимо этого мы должны отобразить не только список товаров (соответствующих этим характеристикам), но и обновить сам компонент фильтрации, чтобы в нем остались только те варианты характеристик, которые присутствуют в найденных результатах. Для этого мы задействовали ElasticSearch. Модуль предлагает простые API на основе REST и легкий HTTP-интерфейс, а также использует документы JSON без схем, благодаря чему быстро создаются приложения. Мы выбрали Elasticsearch, так как распределенная система позволяет параллельно обрабатывать большие объемы данных, мгновенно подбирая наилучшее соответствие к запросу. У каждого значения фильтра необходимо отобразить количество товаров, которое за ним скрывается. Все это пересечения множеств, вычисление которых происходит при помощи ElasticSearch aggregations. Главной фишкой агрегатов является их вложенность без ограничений по глубине. Мы использовали один из основных типов агрегаций Bucketing. Принцип работы Bucketing похож на знакомый всем инструмент «GROUP BY», это довольно упрощенное сравнение, но принцип работы схож. Этот тип на основе фильтров обобщает документы, по какому-то определённому признаку, хороший пример это terms aggregation.
Стек технологий
- Бэкэнд написанный на Ruby on Rails;
- PostgreSQL, которая используется в качестве базы данных;
- Node.js - программная платформа, основанная на движке V8;
- Socket.IO — библиотека для веб-приложений и обмена данными в реальном времени;
- Express — фреймворк web-приложений для Node.js;
- ElasticSearch — программная поисковая система, которая была использована для поиска товаров и их фильтрации;