dipatrik10 97bf3cc50a feat: завершить миграцию фронтенда на React (этапы 1-5)
Админка, настройки, логин, кабинеты преподавателя и студента
полностью переведены на React 19 (модель strangler, docs/REACT_MIGRATION.md).

- 15 вкладок админки: lazy-загрузка, общий error boundary, сервисный слой
- Удалены legacy-views и переходный слой LegacyTabView (45 файлов)
- Сборка esbuild (frontend/scripts/build-react.mjs) с бюджетами gzip на чанки
- CSP-хэши, кэширование: chunk'и immutable, CSS/HTML no-cache (react-cache.conf)
- Фиксы: lazy-импорт именованных экспортов (краш после авторизации),
  растяжение #admin-root/#settings-root на всю ширину,
  возврат subjects/lessonTypes из справочников (краш просмотра расписаний),
  отказ от заведомо широкого поиска расписания без выбранной цели,
  центрирование карточки логина
- Тесты: 237/237 (npm run check), регрессионные на lazy-вкладки и ширину
- Документация: REACT_MIGRATION.md, REACT_MIGRATION_RESULT.md, FRONTEND.md
2026-09-28 23:15:04 +03:00
/
2026-07-30 03:18:43 +03:00
2026-07-04 22:15:05 +03:00
/
2026-07-30 03:18:43 +03:00

📚 Magistr — Система управления университетским расписанием

Обзор

Magistr — веб-приложение для управления расписанием занятий университета. Система поддерживает мультитенантную архитектуру (каждый университет = отдельная база данных), ролевую модель доступа (Администратор, Преподаватель, Студент), календарные учебные графики и полное управление аудиторным фондом, группами, дисциплинами и преподавательским составом.


Стек технологий

Компонент Технология
Backend Java 17, Spring Boot 3.5.16
Frontend React 19 + переходные Vanilla JavaScript ES-модули + HTML/CSS
База данных PostgreSQL (через Flyway миграции)
Контейнеризация Docker, Docker Compose
Продакшн Kubernetes, Caddy (реверс-прокси)
Мониторинг SigNoz, OpenTelemetry
CI/CD Gitea Actions

Быстрый старт

Предварительные требования

  • Docker и Docker Compose
  • Git
  • запущенный Caddy из ../сaddy-proxy/

Локальный запуск

# 1. Клонировать репозиторий
git clone <repo-url> magistr && cd magistr

# 2. Подготовить локальные переменные
cp .env.example .env
# Укажите в .env POSTGRES_PASSWORD и случайный JWT_SECRET.
# JWT_SECRET можно сгенерировать командой: openssl rand -base64 48

# 3. Один раз создать общую proxy-сеть и запустить Caddy
docker network inspect proxy >/dev/null 2>&1 || docker network create proxy
docker compose -f ../сaddy-proxy/compose.yaml up -d

# 4. Запустить все сервисы Magistr
docker compose up -d --build

Compose создаёт внутреннюю сеть и именованный том PostgreSQL, а backend/frontend подключает к общей внешней сети proxy. Они не публикуют порты на хосте: Caddy принимает запросы на https://localhost (http://localhost перенаправляется на HTTPS), /api отправляет в backend, остальные пути — во frontend. PostgreSQL остаётся только во внутренней сети.

Caddy использует локальный корневой сертификат. В CachyOS/Arch его можно добавить в системное хранилище командами из STARTUP_GUIDE.md; без этого браузер покажет предупреждение.

Учётные данные по умолчанию:

Логин Пароль Роль
admin admin Администратор
Тестовый преподаватель 1234567890 Преподаватель

Эти и остальные прежние демонстрационные записи загружаются миграцией V2__test_data.sql. Она также создаёт 200 дополнительных групп, 150 синтетических преподавателей и связанные дисциплины, аудитории, календари и правила расписания. Пароли массовых преподавателей генерируются случайно и не предназначены для входа.

Полезные команды

# Просмотр логов
docker compose logs -f backend

# Полный сброс базы данных (удаление данных + повтор миграций)
docker compose down -v
docker compose up -d --build

# Остановка всех сервисов
docker compose down

Структура проекта

magistr/
├── backend/                    # Java Spring Boot backend
│   └── src/main/
│       ├── java/com/magistr/app/
│       │   ├── controller/     # REST-контроллеры (10 шт.)
│       │   ├── model/          # JPA-сущности
│       │   ├── dto/            # Data Transfer Objects
│       │   ├── repository/     # Spring Data JPA репозитории
│       │   ├── config/         # Конфигурация приложения
│       │   │   └── tenant/     # Мультитенантность
│       │   └── utils/          # Валидаторы
│       └── resources/
│           ├── application.properties
│           └── db/migration/   # Flyway SQL миграции
├── frontend/                   # Статический фронтенд
│   ├── index.html              # Страница авторизации
│   ├── admin/                  # Админ-панель (деканат)
│   │   ├── js/views/           # Модули представлений
│   │   └── css/                # Стили
│   ├── department/             # Redirect в кабинет кафедры внутри admin SPA
│   ├── edu-office/             # Redirect в кабинет учебного отдела внутри admin SPA
│   ├── teacher/                # Интерфейс преподавателя
│   └── student/                # Интерфейс студента
├── docs/                       # 📖 Документация (вы здесь)
├── compose.yaml                # Docker Compose конфигурация
├── .env                        # Переменные окружения
└── AGENTS.md                   # Руководство для AI-агентов

📖 Навигация по документации

Документ Содержание
Архитектура Общая архитектура, мультитенантность, взаимодействие компонентов
Бизнес-логика Ролевая модель, правила расписания, управление ресурсами
Идеи развития Продуктовые предложения, приоритеты и возможный roadmap проекта
Календарный учебный график Модель графиков по специальностям, профилям и группам
База данных Схема БД, описание таблиц, Flyway миграции
REST API Все эндпоинты с примерами запросов и ответов
Инфраструктура Docker, Kubernetes, CI/CD, мониторинг
Runbook безопасности Production-секреты, ротация и очистка истории
Разработка Code Style, соглашения, инструкции для разработчиков
Frontend Архитектура фронтенда, модули, стили
Description
No description provided
Readme 12 MiB
Languages
Java 55.8%
JavaScript 24%
CSS 8.2%
HTML 7%
PLpgSQL 3.8%
Other 1.2%