шлется на реальный сервер #2

Merged
gorbenko.pavel merged 15 commits from initial-fixes into main 2026-08-24 08:54:41 +00:00
Owner
No description provided.
gorbenko.pavel added 8 commits 2026-08-24 06:50:14 +00:00
Обновлены label в KIND_OPTIONS, комментарии и placeholder ФИО в форме.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
POST /feedback собирает поля формы в столбцы списка (Company резолвится
в название по справочнику, Type/Title — по виду обращения) и создаёт
элемент через api.tnsu.kz /SharePoint/ListItem. Ошибки авторизации и
апстрима логируются в stdout и возвращаются клиенту как 502, чтобы сбой
на проде было видно явно.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Убрал требование задавать их через .env на сервере — значения одни
и те же для единственного прод-окружения.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
Merge remote-tracking branch 'origin/main' into initial-fixes
Tests / frontend-test (pull_request) Successful in 13s
89168024df
# Conflicts:
#	server/src/config.ts
#	server/src/index.ts
gorbenko.pavel added 1 commit 2026-08-24 07:10:33 +00:00
правка
Tests / frontend-test (pull_request) Successful in 12s
948ef76d17
gorbenko.pavel added 6 commits 2026-08-24 08:38:08 +00:00
Токен с aud=graph.microsoft.com api.tnsu.kz отклонял с 401 — он проверяет
аудиторию входящего JWT. Меняем scope по умолчанию на App ID URI самого
api-tnsu-portal; наш сертификат для него уже авторизован, отдельный
client secret не нужен.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
npm run dev читает server/.env через --env-file (нативно в Node 20+),
чтобы не передавать GRAPH_* руками при каждом старте. Без запущенного
сервиса на 3100 vite-прокси отдаёт 500, что легко принять за баг формы.

.env добавлен в .gitignore, в репозиторий положен только .env.example.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Локальное окружение требовало двух терминалов, а без запущенного
auth-сервиса форма отдаёт 500 от vite-прокси — это легко принять за баг
приложения. Теперь concurrently стартует оба процесса с метками
[web]/[auth]; только фронтенд — npm run dev:web.

Заодно поправлен README сервиса: GRAPH_SCOPE больше не нужно задавать
руками, дефолт уже указывает на App ID URI api.tnsu.kz.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Состав полей зависит от вида обращения и анонимности, поэтому часть строк
заведомо пустая. Пустая строка в списке выглядит как заполненное значение,
а не как отсутствующее поле — теперь такие поля выпадают из payload.
Значения обрезаются, так что поле из одних пробелов тоже не уедет.

WantsFeedback остаётся всегда: false здесь осмысленно, а не пусто.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Список юрлиц группы меняется без нашего участия, а две копии в репозитории
(COMPANY_OPTIONS во фронте и COMPANY_NAMES на сервере) неизбежно разошлись
бы с источником и между собой. Теперь единственный источник —
/Dictionary/Companies:

- GET /companies проксирует справочник, чтобы токен не утекал в браузер;
- имя компании для колонки Company резолвится по нему же, на сервере;
- в кэше 10 минут — новое юрлицо подхватится без перезапуска сервиса.

Пока список грузится, в select показывается «Загружаем…»; если не
загрузился — ошибка в слоте обязательного поля, а не пустой список.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
Локально путь к сертификату вёл в ~/Downloads у каждого свой, а в контейнере
задавался двумя отдельными переменными. Теперь каталог один и подменяется
целиком через SECRETS_DIR: по умолчанию secrets/ в корне репозитория, в
контейнере /certs (смонтированный каталог с хоста, GRAPH_CERT_DIR не меняется).

Имена файлов внутри фиксированы, поэтому GRAPH_CERT_PATH и GRAPH_KEY_PATH
больше не нужны. Содержимое secrets/ в .gitignore, кроме README.

Отсутствие файлов теперь даёт понятную ошибку вместо ENOENT — на свежем
клоне это основной сценарий отказа.

Co-Authored-By: Claude Opus 5 <noreply@anthropic.com>
gorbenko.pavel merged commit dea024f3a9 into main 2026-08-24 08:54:41 +00:00
gorbenko.pavel deleted branch initial-fixes 2026-08-24 08:54:41 +00:00
Sign in to join this conversation.
No Reviewers
No Label
1 Participants
Notifications
Due Date
No due date set.
Dependencies

No dependencies set.

Reference: gorbenko.pavel/hr-appeals#2