Бэкенд-часть системы управления школьным расписанием. Обеспечивает логику распределения занятий, проверку конфликтов и управление нагрузкой учителей.
- Node.js: Версия 16 или выше
- npm или yarn
cd backend
npm install# Режим разработки (с автоматической перезагрузкой)
npm run dev
# Обычный запуск
npm startGEMINI_API-KEY="APIKEY'- Маршрут:
POST /api/schedule - Описание: Создает новый урок. Включает автоматическую проверку на конфликты (занят ли класс, учитель или кабинет).
- Тело запроса (JSON):
{ "type": "lecture", "subject": "Физика", "teacherId": 10, "className": "9A", "roomNumber": "205", "startTime": "2023-10-27T10:00:00Z", "endTime": "2023-10-27T10:45:00Z" } - Возвращает: Объект созданной записи с присвоенным
id.
- Маршрут:
GET /api/schedule/class/:className - Описание: Возвращает список активных занятий для класса на указанную дату.
- Query-параметры:
date(ISO дата или YYYY-MM-DD). - Возвращает: Массив объектов расписания, отсортированный по времени.
- Маршрут:
GET /api/schedule/teacher/:teacherId - Описание: Возвращает список активных занятий для учителя на указанную дату.
- Query-параметры:
date(ISO дата или YYYY-MM-DD). - Возвращает: Массив объектов расписания.
- Маршрут:
POST /api/schedule/replace-teacher - Описание: Заменяет одного учителя на другого во всех записях в указанном диапазоне дат.
- Тело запроса (JSON):
{ "oldTeacherId": 10, "newTeacherId": 11, "fromDate": "2023-10-27T00:00:00Z", "toDate": "2023-10-31T23:59:59Z" } - Возвращает:
{ "success": true }.
- Маршрут:
DELETE /api/schedule/:entryId - Описание: Помечает занятие как неактивное (
is_active = 0). - Возвращает:
{ "success": true }.
- Маршрут:
GET /api/schedule/teacher/:teacherId/free-slots - Описание: Вычисляет свободные промежутки времени учителя в учебный день (с 08:00 до 17:00).
- Query-параметры:
date: Дата поиска.slotDuration: Длительность слота в минутах (по умолчанию 45).
- Возвращает: Массив объектов
{ start, end }.
Система использует SQLite для хранения данных. Основные таблицы:
subjects: Справочник учебных дисциплин.period_info: Настройки формул расчета и типов баллов для периодов.schedule_entries: Календарь занятий. Полеtypeопределяет характер урока (regular,sor,soch).student_grades: Связующая таблица для учета посещаемости (attendance) по каждому уроку.marks: Таблица всех полученных баллов.mark_typeпринимает значения:formattedScore(текущая),sor(СОР),soch(СОЧ).
erDiagram
subjects ||--o{ schedule_entries : contains
subjects ||--|| period_info : has
schedule_entries ||--o| student_grades : status
schedule_entries ||--o{ marks : results
- Runtime: Node.js
- Database: SQLite (better-sqlite3)
- Logging: Winston / Custom Logger
Все операции с базой данных и бизнес-проверки сосредоточены в backend/src/services/scheduleService.js.
- Проверка конфликтов осуществляется перед каждой вставкой.
- Поддерживается "мягкое" удаление записей через поле
is_active.