[BACK-WS-01] Сервис WebSocket уведомлений и интеграция с очередью обработки медиа

Бэкенд: Архитектура

Published

October 14, 2026

NoteКраткая карточка задачи
  • Репозиторий / Компонент: food_tracker_backend (Go).
  • Стек: Go (Gorilla WebSocket / Centrifugo), Apache Kafka, PostgreSQL.
  • Тип задачи: Backend (Архитектура / Асинхронный пайплайн).
  • Статус: В анализе

Описание задачи

После отправки чека или аудио пайплайн (ИИ -> Валидация -> Kafka-топик -> Запись в Postgres воркером) выполняется асинхронно. Необходимо реализовать WebSocket-сервер для доставки клиенту события об успешном завершении транзакции в реальном времени.

Инструкция по шагам (Go)

  1. Реализация WS-эндпоинта: Создать хендлер /api/v1/ws, выполняющий Upgrade HTTP-соединения до WebSocket. Предусмотреть валидацию JWT-токена пользователя при подключении.
  2. Менеджер сессий (Hub): Реализовать структуру управления активными соединениями (Hub/Pool), сопоставляющую UserID с его текущим сетевым соединением (conn).
  3. Чтение из топика Kafka (Воркер): Воркер, который слушает финальный топик результатов обработки (receipts_processed), после успешного выполнения INSERT в таблицу продуктов PostgreSQL, должен отправить событие во внутренний канал (Event Bus) бэкенда.
  4. Стриминг события: При получении события из канала:
    • Проверить, активна ли WebSocket-сессия для данного UserID.
    • Если ДА: Отправить в сокет JSON-пакет: {"event": "PRODUCTS_PROCESSED", "transaction_id": "BILL-XXX", "count": 5}.
    • Если НЕТ (пользователь закрыл приложение): Сгенерировать задачу в сервис пушей (FCM) для отправки системного Push-уведомления.