Перейти к основному содержимому

ADR-0054: Сессии + история просмотров + трекинг действий = один контекст user-activity

Статус

Accepted

Дата

2026-07-13

Контекст

ТЗ.md описывает три пересекающихся сервиса и само сомневается в границах (стр. 267: «нужен ещё трекинг-сервис… или это должна быть его часть, его модуль»): Сервис сессий (263–273), Сервис истории просмотров (253–261), Сервис отслеживания действий (359–361). Все трое работают с одним потоком данных: гостевая/пользовательская сессия → события действий (просмотры с длительностью, фильтры, избранное, подборки) → выдача истории пользователю/агенту/в карточку лида.

Решение

Один bounded context user-activity с тремя модулями:

МодульВладеетОтдаёт
sessionsSession, anonymous_id, связывание сессия↔пользователь при входеконтекст сессии для favorites/каталога
viewsViewHistory (объект, фильтр-контекст, длительность просмотра)история просмотров пользователю; по UserId — агенту/менеджеру
actionsActionEvent (typed: применён фильтр, добавлено в избранное/подборку, поиск)события в карточку лида (CRM), будущий вход рекомендаций news

Один API/один store — только PostgreSQL (ADR-0056: simplicity-first, без Redis/ClickHouse), общие события pin.user-activity.*. Закрытие сессий/просмотров и длительности — механизм LastActivityAt + polling-delta (10–15 мин) с публикацией session-ended/lot-view-ended и агрегатами LotViewStats — см. ADR-0056 п.3. Разделение на отдельные сервисы возможно позже без смены контрактов.

Последствия

  • Устранено дублирование моделей сессии/события в трёх местах; «слияние сессий» избранного использует единый механизм связывания.
  • CRM получает один consumer потока действий для карточки лида (реф-требование «отслеживание в течение месяца»).
  • Приватность: доступ к чужой истории — только по permissions (агент видит историю лида в рамках активной связи; ТЗ.md:257–259).

Обратные ссылки

Автоссылки: где используется этот документ.

Связанные документы

  • docs/06-services/user-activity/, docs/06-services/favorites/ (слияние), docs/06-services/crm/ (карточка лида).