[BACK-WS-01] Сервис WebSocket уведомлений и интеграция с очередью обработки медиа
Бэкенд: Архитектура
NoteКраткая карточка задачи
- Репозиторий / Компонент:
food_tracker_backend(Go). - Стек: Go (Gorilla WebSocket / Centrifugo), Apache Kafka, PostgreSQL.
- Тип задачи: Backend (Архитектура / Асинхронный пайплайн).
- Статус: В анализе
Описание задачи
После отправки чека или аудио пайплайн (ИИ -> Валидация -> Kafka-топик -> Запись в Postgres воркером) выполняется асинхронно. Необходимо реализовать WebSocket-сервер для доставки клиенту события об успешном завершении транзакции в реальном времени.
Инструкция по шагам (Go)
- Реализация WS-эндпоинта: Создать хендлер
/api/v1/ws, выполняющий Upgrade HTTP-соединения до WebSocket. Предусмотреть валидацию JWT-токена пользователя при подключении. - Менеджер сессий (Hub): Реализовать структуру управления активными соединениями (
Hub/Pool), сопоставляющуюUserIDс его текущим сетевым соединением (conn). - Чтение из топика Kafka (Воркер): Воркер, который слушает финальный топик результатов обработки (
receipts_processed), после успешного выполненияINSERTв таблицу продуктов PostgreSQL, должен отправить событие во внутренний канал (Event Bus) бэкенда. - Стриминг события: При получении события из канала:
- Проверить, активна ли WebSocket-сессия для данного
UserID. - Если ДА: Отправить в сокет JSON-пакет:
{"event": "PRODUCTS_PROCESSED", "transaction_id": "BILL-XXX", "count": 5}. - Если НЕТ (пользователь закрыл приложение): Сгенерировать задачу в сервис пушей (FCM) для отправки системного Push-уведомления.
- Проверить, активна ли WebSocket-сессия для данного