Несколько тысяч файлов, полмиллиона строчек кода, две тысячи комитов, полторы тысячи электронных писем от заказчика и более полугода напряженной работы. Сказать, что разработка сайта и бэкофиса интернет-магазина «Альянса» стала для нашей команды хорошей проверкой на прочность — значит не сказать ничего.

Конечно, еще на старте проекта у нас были определенные сомнения в том, что на «Битриксе», на котором работал предыдущий интернет-магазин, получится сделать быстрые и точные калькуляторы. А после глубокого изучения алгоритмов расчета страховых продуктов, когда схема базы данных выросла более чем до сотни таблиц, стало совершенно очевидно: всё придется писать с нуля.

Кстати, небольшой фрагмент этой схемы выглядит так:

СК Альянс

Дальше было много интересных решений, идей и, разумеется, обычной рутины. Как обычно, аппетит пришел к заказчику непосредственно во время еды, поэтому, вследствие постоянно менявшихся требований и появлявшихся новых идей, каждая строчка кода была отрефакторена минимум дважды. А некоторые фрагменты — и вовсе десятки раз.

Конечно, мы очень старались сделать архитектуру слабосвязанной (насколько это позволяет Yii). Часть компонентов системы общается между собой через события, хотя классический Observer по ряду причин нам не подошел. Некоторые процессы были вынесены из кода сайта в отдельные модули, запускаемые через систему очередей.

Основной цикл работы магазина выглядит следующим образом: сначала все поступившие заявки распределяются по операторам, с учетом ролей, продуктовых групп, возможностей и очередей. Операторы проверяют расчет, наличие всех необходимых данных и документов, и либо передают заявку обратно клиенту на оплату, либо готовят полис и переводят его в доставку. Разумеется, все полисы создаются в формате PDF и могут быть оплачены пластиковыми картами. Некоторые полисы подписываются электронной цифровой подписью. В конечном счете, все данные по заявке, оплате и полису передаются во внутренние учетные системы заказчика.

К слову, автоматическое заполнение PDF-форм для создания полиса, казавшееся совершенно элементарной задачей, тоже подарило кучу неожиданностей (thanks Jan Slabon from Setasign for prompt assistance ;)

Пришлось повозиться и с обменами данными. Для того, чтобы реализовать все необходимые возможности и удовлетворить все требования, пришлось наладить взаимодействие через веб-сервисы и с самим «Альянсом», и с РСА, и системой цифровых подписей, и с «Альфа-Банком». Попутно убедились, что REST — это хорошо, но SOAP лучше (даже WSDL не всегда спасал от ошибок схем данных).

Уже в самом конце этого длинного пути выяснилось, что придется работать со справочником КЛАДР. Ускорить этот процесс помогли Sphinx и Redis.

Ну, и, разумеется, пока фронт-энд разработчик отлаживал все мелочи в интерфейсах калькуляторов, его перестали узнавать дети.

Правда, потом оказалось, что дети были чужими.