Технічні виклики
Проект був великою нерозгаданою головоломкою, яку ми розглядали як окремі завдання, пріоритетизували та вирішували поетапно. Ми вибрали Vendure.io, оскільки це сучасний фреймворк для швидкого створення електронної комерції з можливістю розробки власного користувацького інтерфейсу та розширення існуючої функціональності за допомогою Node.js та GQL. Далі ми переструктурували бази даних: об’єднали їх, конвертували формат даних, виключили дублікати та пошкоджені дані, мігрували до Postgre. MVP було м’яко випущено, і стара версія тимчасово функціонувала паралельно для бета-тестування. Наступним викликом було розширення функціональності та оновлення бази даних новими даними – виробники, частини, прайс-листи, схеми знижок. Нова функціональність включала систему знижок, багатомовну підтримку, імпорт ціноутворення та автоматизацію експорту замовлень. Найважче було реплікувати систему знижок та розробляти автоматизацію прайс-листів. Однак деякі автозапчастини виробляються на різних фабриках та місцях і можуть мати повністю замінювані аналоги від інших брендів, і кожен виробник надає накопичувальні знижки, які залежать від того, скільки товару компанія закуповує регулярно. Таким чином, перед розробкою цієї функціональності ми зібрали всі вимоги, щоб бути впевненими, що ми розуміємо один одного. Щодо автоматизації імпорту, кожні 3 місяці Клієнт отримує файли з актуальними продуктами та новими цінами від постачальників. Файли містять мільйони рядків, і було необхідно розбирати ці файли за допомогою багатопоточності та черг та ефективно оновлювати каталог продукції, обробляти помилки обробки та скорочувати часи оновлення. Після введення даних каталог продукції збільшився до 10 млн унікальних частин, що спричинило серйозне зниження продуктивності. Ми провели сесії тестування навантаження, оптимізуючи бізнес-логіку, структуру бази даних, індекси, SQL-запити, API, схеми GQL, інтерфейс користувача, сценарії та інфраструктуру. Після 3 тижнів метушливої роботи ми досягли бажаних результатів. Тепер новий сайт повністю замінив застарілу версію.