No description
This repository has been archived on 2026-10-27. You can view files and clone it, but you cannot make any changes to its state, such as pushing and creating new issues, pull requests or comments.
  • TypeScript 56.8%
  • Go 36.5%
  • CSS 3.3%
  • JavaScript 1.2%
  • HTML 1%
  • Other 1.1%
Find a file
Repository files (latest commit first)
Filename Latest commit message Latest commit date
2026-08-24 01:06:25 +03:00
.githooks test: move vitest to pre-push hooks 2026-07-06 04:33:23 +03:00
.github/workflows test: comment e2e until better times 2026-07-06 04:57:55 +03:00
.idea Постреквизиты (#19) 2026-06-03 04:23:59 +03:00
.run fix max load 2026-06-03 18:06:31 +03:00
admin fix remote nginx 2026-06-04 23:42:30 +03:00
backend feat: ignore test spreadsheets during sync 2026-07-14 00:40:10 +05:00
docs stable 2026-05-05 01:18:45 +03:00
frontend perf: small changes 2026-07-13 16:46:37 +03:00
metrics fix deploy 2026-06-03 07:10:48 +03:00
nginx admin panel redirect return 2026-06-05 19:01:36 +03:00
scripts fix remote nginx 2026-06-04 23:42:30 +03:00
.env.example feat: switch from STEM to Copy of STEM sheet in sync configuration 2026-07-04 22:11:13 +03:00
.gitignore chore: ignore and remove executable binaries 2026-06-22 19:56:16 +03:00
ARCHITECTURE.md stable 2026-05-05 01:18:45 +03:00
docker-compose.e2e.yml test: e2e playwright tests 2026-07-05 18:57:22 +03:00
docker-compose.yml admin panel at /admin 2026-06-04 22:19:10 +03:00
README.md repo archivation notice 2026-08-24 01:06:25 +03:00

CU Roadmap Engine

Репозиторий переехал за внутренний контур ЦУ

Планировщик учебных траекторий для университета: подбор курсов по мажору, визуализация зависимостей, идентификация направления.

Стек

Слой Технологии
Бэкенд Go 1.26, Gin, GORM, PostgreSQL 16
Фронтенд React 19, TypeScript, Vite, Tailwind CSS 4, pnpm
Инфра Docker Compose, Nginx, Google Sheets API

Структура

backend/
  main.go              точка входа, инициализация store → роутер → сервер
  api/                 HTTP-обработчики (gin handlers)
    courses.go         GET /api/v1/courses/
    majors.go          GET /api/v1/majors/
    auth.go            POST /api/v1/auth/login
    middleware/
      auth.go          middleware для проверки cookie-авторизации
    docs/api/v1.yaml   OpenAPI спецификация
  store/               слой данных
    memory.go          in-memory реализация (CSV seeding)
    postgres.go        PostgreSQL реализация (GORM)
    factory.go         синглтон store (InitStore / GetStore / CloseStore)
    helpers/           конвертеры (CourseData ↔ gin.H)
  domain/              типы данных и модели GORM
    models/
    enums/
    schemas/
  service/             бизнес-логика
    planner.go         генерация roadmap
    validator.go       валидация семестров и roadmap
    greedy.go          жадный алгоритм планирования
  Dockerfile           multi-stage сборка
frontend/
  src/
    App.tsx            корневой компонент (табы + гейт авторизации)
    pages/             страницы приложения
    shared/            переиспользуемые UI и конфигурация
    app/providers/     AuthProvider, ThemeProvider

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

Требования

  • Go 1.26+
  • pnpm (устанавливается через corepack enable или npm install -g pnpm)
  • Node.js 22+
  • PostgreSQL 16 (опционально, можно использовать in-memory store)

Быстрый старт (in-memory store, без БД)

# клонируем и настраиваем хуки
git clone <repo>
cd cu-roadmap
git config core.hooksPath .githooks

# бэкенд
cd backend
FORCE_MEMORY_STORE=true go run .
# → сервер на 0.0.0.0:8080, данные загружаются из *.csv

# фронтенд (в другом терминале)
cd frontend
pnpm install
pnpm dev
# → http://localhost:5173

С PostgreSQL

# .env файл
DATABASE_URL=postgres://user:pass@localhost:5432/roadmap_db?sslmode=disable
FORCE_MEMORY_STORE=false

cd backend
go run .

Через Docker Compose

docker compose up --build
# → nginx на :9679, бэкенд на :8080, фронтенд на :5173

Тестирование

# бэкенд
cd backend && go test -p 1 -count=1 ./...

# фронтенд
cd frontend && pnpm test

Форматирование

Хуки в .githooks/pre-commit автоматически форматируют код перед коммитом:

  • Go: gofumpt -w
  • Фронтенд: prettier --write
  • go mod tidy

В CI те же проверки запускаются в GitHub Actions.

API

Полная спецификация: backend/docs/api/v1.yaml

Основные эндпоинты:

Метод Путь Описание
GET /api/v1/courses/ все курсы с to_major и specialisations
GET /api/v1/majors/ все мажоры с требованиями
POST /api/v1/majors/identify идентификация мажора по курсам
POST /api/v1/planner/generate генерация roadmap
POST /api/v1/planner/goal-path/ путь до целевого курса
POST /api/v1/planner/validate-roadmap/ валидация roadmap
GET /api/v1/graph/data данные графа зависимостей
POST /api/v1/auth/login вход по паролю (устанавливает cookie)
GET /api/v1/auth/check проверка валидности cookie
DELETE /api/v1/auth/logout завершение сессии и logout

Админ-эндпоинты (требуют cookie, полученную через /auth/login):

Метод Путь Описание
POST /api/v1/courses/ создать курс
PUT /api/v1/courses/:id обновить курс
DELETE /api/v1/courses/:id удалить курс
PUT /api/v1/majors/:id обновить мажор

Фичи

  • Планировщик roadmap — автоматическая генерация семестров на основе требований мажора
  • Каталог курсов — поиск, фильтрация по категориям и семестрам
  • Граф зависимостей — визуализация пререквизитов через vis-network
  • Идентификация мажора — расчёт индекса Жаккара между пройденными курсами и требованиями мажора
  • Целевой путь — построение траектории до конкретного курса
  • Ручное планирование — drag-and-drop составление roadmap с валидацией
  • Авторизация — вход по паролю, cookie-сессия, защита админ-эндпоинтов