Назад в блог
Практика

Интеграция задач с Aspro.Cloud: импорт, ссылки и уведомления

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

Интеграция задач с Aspro.Cloud: импорт, ссылки и уведомления

Зачем связывать внутренние и внешние задачи

У собственного таск-трекера удобный интерфейс для ежедневной работы, но часть задач живёт во внешней системе. Простое копирование заголовков быстро приводит к расхождению: статусы меняются в одном месте, комментарии остаются в другом, а ссылка на источник теряется.

Поэтому я добавил интеграцию с Aspro.Cloud не как импорт CSV, а как постоянную связку между локальной задачей и внешним объектом.

Таблица связей вместо хрупких полей

Для каждой импортированной задачи теперь хранится отдельная запись связи: внешний идентификатор, ссылка, статус синхронизации, время последнего обновления и исходный payload. Благодаря этому локальная задача не привязывается жёстко к одному провайдеру, а интеграционный слой остаётся расширяемым.

В адаптере появилась нормализация внешних данных: название, статус, приоритет, дедлайн и оценка приводятся к локальной модели. Закрытые внешние задачи при импорте пропускаются, чтобы не засорять рабочий список.

Комментарии и учёт времени

Связка стала полезнее после синхронизации комментариев и времени. Если внешняя система отдаёт логи времени, они превращаются в локальные записи; если нет, используется агрегированное потраченное время из задачи.

Для комментариев важно было избежать дублей. Поэтому у них появился внешний binding, а сама синхронизация знает, какие сообщения уже импортированы. В Filament это дополнилось отдельным просмотром задачи, где виден внешний контекст без лишнего редактирования.

Уведомления после успешной транзакции

Когда импортируется новая задача или приезжает внешний комментарий, приложение может отправить письмо на настроенный адрес. Письма ставятся в очередь и запускаются только afterCommit, чтобы не уведомлять о данных, которые потом откатятся из-за ошибки.

Это маленькая деталь, но она хорошо показывает разницу между «оно работает» и «ему можно доверять».

Практический результат

Интеграция перестала быть разовым импортом и стала частью доменной модели. Локальный трекер по-прежнему остаётся главным рабочим интерфейсом, но теперь не теряет связь с внешней системой, комментариями и фактическим временем.