Кастомная фильтрация в CRM — делаем нормальную архитектуру
Сейчас в поиске новой команды, решил рассказать про одну из задач которые запомнились.
Делали рассылки в CRM. По сути просто — клиент выбирает кому рассылать сообщения: по возрасту, полу, уровню аккаунта, посещённым услугам и так далее. Изначально это была просто передача полей на бэкенд.
Потом захотели добавить фильтр по дням рождения. Потом по мастерам. Стало понятно что каждый новый критерий — это отдельная правка и на фронте и на бэке.
Было решено сделать архитектуру более гибкой. В итоге я предложил сделать что-то вроде Lucene синтаксиса и визуальной обертки для него. Пришли к тому, что фронт собирает дерево условий в своём формате, переводит его в JsonLogic и отправляет на бэк. Каждый тип поля — отдельный класс с логикой трансформации. Новый критерий — просто новый класс, наследующийся от базового.
Теперь клиенты могли делать полноценные сложные условия вроде (родился в мае ИЛИ июне И больше 18 лет) и система стала более расширяемой.
А у вас был момент когда становилось очевидно что часть проекта пора переделывать? Как вы это поняли?