Files
dc-observatio/services/pcp-tgu-ui-service
Дмитрий Соловьев 5869994690 feat(tgu-slots): подтверждение брони всегда + «Снять всё» снимает всю заявку
- Бронь теперь всегда через диалог подтверждения (симметрично «Снять всё»),
  убран порог в 500 слотов.
- «Снять всё» дочитывает брони заявки через by-request и снимает объединение
  локального и серверного наборов bookedSlotId — гарантированно вся заявка.
- Карта: забронированные слоты вне окна суток подчинены фильтрам видимости
  (статус «бронь»/КА/ветвь) — при выключенном фильтре брони их не видно.
2026-06-15 17:22:35 +03:00
..

pcp-tgu-ui-service

Фронтенд «ТГУ — Операции». Сервис собран с нуля на чистой базе исходного pcp-tgu-ops-ui (React + Vite, своя тёмная тема), в которую добавлены только две вещи с платформы NStart:

  1. Авторизация — headless-ядро @nstart/auth (New Start ID / Keycloak): токен, login, logout, refresh. Без @nstart/ui — UI-компоненты библиотеки (ProfilePage/UserPanel) намеренно не подключены, экраны ТГУ остаются на своём UI.
  2. Сборка и деплой — платформенный контракт: hardened Dockerfile (non-root, healthcheck), runtime-config (config.js из APP_*), docker-bake.hcl, .gitlab-ci.yml (build → trivy/semgrep → push в registry), nginx.conf.

В отличие от pcp-tgu-ops-ui-template, здесь нет демо-страниц шаблона, @nstart/ui, Tailwind, i18n и борьбы тем — только рабочий ТГУ + auth + контур сборки/деплоя.

Авторизация (headless)

  • Режим выбирается переменной authMode (anonymous | new-start-id).
  • anonymous (дефолт): приложение открывается сразу, токена нет, заголовок Authorization не добавляется — поведение как у исходного сервиса.
  • new-start-id: вход редиректом на New Start ID; токен подставляется в каждый запрос src/api/* через мост apiFetch + AuthTokenBridge. В шапке появляется кнопка «Выйти».
  • Конфиг входа берётся из src/config/env.ts (runtime APP_* имеют приоритет над build VITE_*).

Конфигурация окружения

Назначение DEV (npm run dev) PROD (Docker)
источник .env (VITE_*) APP_* контейнера → config.js
api VITE_API_URL APP_API_URL
режим auth VITE_AUTH_MODE APP_AUTH_MODE
New Start ID VITE_NEW_START_ID_* APP_NEW_START_ID_*

Доступ к приватному реестру @nstart/*: scope @nstart:registry=... должен быть в ~/.npmrc (или в конфиге CI-раннера). Проектный .npmrc задаёт только min-release-age=7.

Запуск

cp .env.example .env     # режим anonymous, открывается сразу
npm install              # нужен доступ к repo.nstart.cloud (scope @nstart)
npm run dev              # http://localhost:5174
npm run build            # tsc -b + vite build
npm run test             # vitest

Прод-прокси (осталось настроить)

В nginx.conf активный /api/ — заглушка (127.0.0.1:8000), а блоки pcp-* закомментированы (зеркало server.proxy из vite.config.ts). Подставьте реальные UPSTREAM_* кластера и раскомментируйте, либо вынесите маршрутизацию на gateway/ingress.