Files
TestingWebApp/flask_app
Константин Лебединский 2d6d75fb3c ui(mobile): полировка расположения редактора и каталога
Только layout/spacing/touch-targets, без изменения цветовой палитры
и типографики.

editor.html
- Шапка теста: «Название» — отдельной строкой, large input; «Описание»
  ниже; «Проходной балл» — компактная пара label+input справа,
  inputmode="numeric".
- AI-панель разбита на 3 группы с подзаголовками: «Создать вопросы»
  (По названию / По текущей сетке), «Улучшить существующее»
  (Проверить / Улучшить), «Импортировать» (загрузка файла).
- Все основные кнопки — min-h-11, на мобиле во всю ширину/в гриде по 2.
- Карточка вопроса: бейдж-номер, кнопки up/down/delete по 40×40,
  textarea и опции — на всю ширину с min-w-0 чтобы не было overflow.
- Опции: чекбокс «Правильный» в 40×40 tap-target, input занимает flex,
  кнопка удаления 40×40.
- Footer переведён на fixed bottom с safe-area-inset-bottom; контент
  получает pb-24, чтобы не уезжал под футер.
- Модалка AI-результата теперь fullscreen на мобиле, sm:rounded-2xl
  на десктопе; шапка/тело/кнопки — отдельными зонами.

list.html
- Заголовок и кнопка «Создать тест» вертикально на мобиле,
  кнопка во всю ширину min-h-11.
- Карточка теста — целиком кликабельная (`<a>` обёртка), grid-cols-1
  по умолчанию, sm:2, lg:3.
- Модалка создания — fullscreen на мобиле с крестиком в шапке,
  safe-area-inset-bottom в футере.

base.html
- Ссылки «Тесты» и «Настройки» теперь видны и на мобиле как иконки
  (40×40 tap-target), подписи появляются с sm: брейкпоинта.
- Имя/роль пользователя — только с md+ (узкий мобильный экран).

Made-with: Cursor
2026-04-27 23:55:39 +05:00
..

Flask-контур тестирования (тот же стек, отдельный деплой)

Здесь — новое приложение на Python / Flask в духе HR_TG_Bot/tgFlaskForm (шаблоны + серверный рендер, без React). Старый стек (backend/ + frontend/) пока не удаляется: оба контура могут существовать параллельно, пока не зафиксирована политика «один источник записи» и cutover.

Запуск в Docker (рекомендуется)

Из корня репозитория TestingWebApp. Сервис не зависит от testing-backend и не требует внешней сети Postgres для старта (только внутренняя сеть compose).

docker compose -f docker-compose.dev.yml up -d --build testing-flask

Когда подключите БД из контейнера к hr_postgres_dev / clinic_tests, в docker-compose.dev.yml у сервиса testing-flask добавьте сеть postgres (как у testing-backend).

Вместе со старым UI и API:

docker compose -f docker-compose.dev.yml up -d --build

Тогда Node-интерфейс остаётся на http://localhost:3107, Flask — на 3108.

Запуск локально (без Docker)

cd flask_app
python3 -m venv .venv
source .venv/bin/activate   # Windows: .venv\Scripts\activate
pip install -r requirements.txt
cp .env.example .env      # при необходимости поправьте PORT
python run.py

По умолчанию: http://127.0.0.1:3108 , проверка: http://127.0.0.1:3108/health
Для режима как в Docker (waitress): в .env задайте WEB_USE_WAITRESS=1.

Зачем отдельная папка

  • Один стек с кабинетом / мини-приложением — проще переносить экраны и запросы из HR_TG_Bot/tgFlaskForm/webApp/interfaces/testing/.
  • Отдельный процесс и порт — без риска сломать текущий docker-compose.dev.yml с Node до готовности.

Дальнейшие шаги (код)

Этот каталог — место разработки Этапа 1 (migration-final.md).

  1. Подключить БД clinic_tests (схема не меняется), psycopg2-пул в стиле tgFlaskForm/db/.
  2. Перенести 22 эндпоинта Express из backend/ в blueprint'ы Flask, ориентируясь на чек-лист в migration-final-inventory.md.
  3. Перенести экраны React (frontend/src/pages/*) в Jinja-шаблоны app/templates/, повторяя мобильный UX Спринта 3.
  4. Когда паритет закрыт — docker-compose.dev.yml указывает на этот сервис как основной, backend/ и frontend/ уходят.

ETL clinic_tests → hr_bot_test и слияние с tgFlaskForm — это Этап 2, на будущее (migration-to-tgflaskform.md).

Связанные документы