LITE SOFT DEV
СервераПортал

Бэкенд

Go-сервис портала — слои, RBAC, Redis, обезличивание и клиент NEURO CORE.

Go-сервис — логика WEB PORTAL: держит /api/v1, проверяет права, кэширует ответы LLM и проксирует чат на NEURO CORE.

Запрет прямого доступа

Go на WEB PORTAL не обращается к MongoDB и Qdrant. Импорт mongo- или qdrant-драйвера в код портала — ошибка ревью. Все постоянные данные — через NEURO CORE Service.

Слои

cmd/portal/main.go          // wiring: config, router, redis, neurocore client
internal/httpapi/           // handlers /api/v1, middleware (auth, rbac, ratelimit)
internal/auth/              // технический ID, сессии, RBAC-роли
internal/neurocore/         // клиент к NEURO CORE Service (/v1/chat, /v1/health)
internal/cache/             // LLM-кэш в Redis
internal/queue/             // Asynq producer (ingest:document)
internal/ws/                // WebSocket-сессии для стриминга чата

Handler тонкий: валидирует вход → зовёт service → пишет ответ. Бизнес-логика живёт в service-слое.

Обязанности

Аутентификация по техническому ID

POST /api/v1/auth/login принимает код, выдаёт серверную сессию (httpOnly cookie). Привязка к школе и классу — обезличенная.

RBAC на каждом endpoint

Роль проверяется в middleware после WAF: школьник, учитель, школьный администратор, координатор, ИРО, Министерство, оператор, сисадмин.

Обезличивание перед NEURO CORE

Перед каждым POST /v1/chat из запроса удаляются любые ПДн. Наружу уходят только session_id, anonymous_user_id, messages, scenario.

Кэш и очередь в Redis

Кэш ответов LLM по хэшу запроса, очередь Asynq ingest:document, WebSocket-сессии стриминга.

Redis

ДанныеНазначение
LLM-кэшОтветы ассистента по хэшу нормализованного запроса
Очередь ingest:documentProducer здесь, consumer — на NEURO CORE
WebSocket-сессииАктивные стримы чата

Пользователи и документы в Redis не хранятся — это MongoDB на NEURO CORE; эмбеддинги — Qdrant.

Клиент NEURO CORE

  • Таймауты и retry с backoff на /v1/chat; начатый стрим не ретраится.
  • Circuit breaker: NEURO CORE недоступен → портал работает без чата.
  • GET /v1/health — здоровье для деградации UI.
  • Только внутренняя сеть; context.Context пробрасывается до конца стрима.

On this page