Задача
Доработать и исправить ошибки в существующей системе двухсторонней синхронизации icalCльных ссылок. Наша система должна экспортировать записи занятости объектов с внутреннего сайта на сторонние площадки, а также импортировать с этих площадок данные о полученных бронях обратно.
Текущая архитектура и проблемы
- Даты закрытия объектов вручную заполняются в административной панели сайта (база данных, синхронизированная с внутренним движком).
- Помимо ручного ввода, календарь частично уже обновляется через существующую icalCльную связку, но в этом процессе есть ошибки.
- Процесс выглядит так: администратор экспортирует icalCльную ссылку объекта из внутренней базы на площадки (Авито, Суточно, Твил) и одновременно импортирует соответствующие ссылки обратно с тех же сайтов.
- Текущий скрипт не всегда корректно отрабатывает замыкание цепи синхронизации: закрытая на нашем сайте дата может не передаться другому внешнему сервису (етц).
- Иногда возникает "птичье кольцо": бронь, залетающая с внешнего сайта, дублируется или некорректно передается на наш сайт.
Ключевые требования
- Обеспечить циклическую двухстороннюю синхронизацию: внутренний сайт ←→ каждый из внешних (Авито, Суточно, Твил).
- Если администратор отметил дату как занятую внутри, она должна (через скрипт) закрыться на всех внешних площадках.
- Если на внешней площадке появляется бронь, она должна отразиться:
- на нашем внутреннем сайте (в базе);
- от нашего сайта в iCal ссылках для двух других внешних площадок.
- Убрать эффект дублирования броней или некорректной проверки занятости.
Технические детали
- Опыт работы с PHP и MySQL.
- Понимание принципов динамической синхронизации, особенно с более чем одним сервером- получателем.
- Уникальный небольшой проект, в котором уже есть база с iSlnais.
- Решение должно исключить ручную сверку больших таблиц.
Ожидаемый результат
На выходе нужно получить несколько исправленных файлов / блоков PHP-рутин, которые будут гарандировать atomic-обмен блокировками дат, предотвращать перекрестную зацикленность импорта при эскпорте и фиксировать дату закрытия/открытия в реальном времени.