feat(db): update init.sql with subjects, lesson types, classrooms, and schedules tables

This commit is contained in:
Zuev
2026-02-20 01:56:05 +03:00
parent 86a29f6419
commit 07419d541e
3 changed files with 156 additions and 3 deletions

View File

@@ -43,4 +43,62 @@ trigger: always_on
3. **Маршрутизация/Прокси**: Если возникают проблемы с доменом или внешним доступом, проверьте конфигурацию в `../caddy-proxy/Caddyfile`.
## Языковые предпочтения
- **Всегда отвечайте на русском**: Это строгое требование пользователя. Все объяснения, комментарии и взаимодействия должны быть на русском языке, если только не будет специально запрошено иное.
- **Всегда отвечайте на русском**: Это строгое требование пользователя. Все объяснения, комментарии и взаимодействия должны быть на русском языке, если только не будет специально запрошено иное.
## Функциональные требования к системе
### 1. Ролевая модель
- **Администратор (Деканат)**: Полный доступ, настройка топологии университета, управление аудиторным фондом, подтверждение переносов, регистрация инцидентов.
- **Преподаватель**: Просмотр своего расписания, подача заявок на перенос, отметка о своём отсутствии.
- **Студент**: Только просмотр расписания (Read-only).
### 2. Управление ресурсами и топология
- **Управление аудиториями**:
- Указание вместимости.
- Указание тэгов оборудования (Проектор, ПК, Лаборатория).
- Установка статуса "Не доступно" (блокирует назначение пар в этот период).
- **Управление группами**:
- Управление списком студентов (и возможность деления на подгруппы).
- **Управление дисциплинами**:
- Создание предметов и привязка их к преподавателям (какие дисциплины имеет право вести конкретный преподаватель).
### 3. Логика расписания
- **Проверка конфликтов**:
- *Критический конфликт*: Преподаватель не может находиться в двух разных аудиториях одновременно.
- *Уточнение по преподавателям*: Преподаватель может иметь несколько пар одновременно (для разных групп), только если они проходят в одной и той же аудитории (потоковая лекция).
- **Потоковые занятия**:
- Возможность назначить одну лекцию сразу нескольким группам (технически — несколько записей в БД или одна запись со списком групп).
- Проверка вместимости: вместимость аудитории должна покрывать суммарную численность всех групп, находящихся в этой аудитории в данный слот.
### 4. Управление инцидентами (Инклюзия отсутствия)
- **Отсутствие (Sickness/Business Trip)**: Регистрация отсутствия преподавателя (с указанием причины и периода дат).
- **Обнаружение коллизий**: Автоматическая подсветка конфликтующих пар в расписании (Red Zone).
- **Система разрешения конфликтов (Resolution Wizard)**:
- Предложение подходящей замены преподавателя на этот слот.
- Предложение переноса занятия на другое время или в другую аудиторию.
## Технологический стек (Tech Stack)
- **Backend**: Java 17, Spring Boot 3.2.5 (Starter Web, Data JPA), кастомная токен-авторизация (используется BCrypt, без полной автоконфигурации Spring Security).
- **Database**: PostgreSQL.
- **Frontend**: Vanilla JavaScript + HTML/CSS (без тяжеловесных фреймворков).
## Специфика времени и сетка расписания (Time Management)
- **Гибкие временные слоты**: По умолчанию слоты по 1.5 часа:
1. 08:00 - 09:30
2. 09:40 - 11:10
3. 11:40 - 13:10
4. 13:20 - 14:50
5. 15:00 - 16:30
6. 16:50 - 18:20
7. 18:30 - 20:00
- **Кастомное время**: Система должна позволять устанавливать кастомное время начала и конца пары.
- **Тип расписания**: Календарное расписание, строящееся по принципу чётной / нечётной недели.
## Основные сущности базы данных (Data Entities)
- **Users**: Хранение пользователей и их ролей (Администратор, Преподаватель, Студент) для управления доступом.
- **Groups**: Группы студентов, их привязка к формам обучения. (Могут делиться на **подгруппы** для лабораторных и практик).
- **Classrooms**: Аудиторный фонд (название, вместимость, статус доступности, тэги оборудования).
- **Subjects**: Предметы/Дисциплины (Высшая математика, Физика, Базы данных и т.д.).
- **Teacher_Subjects**: Связующая таблица (Many-to-Many), определяющая, какие дисциплины ведет конкретный преподаватель.
- **Lesson_Types**: Типы занятий для валидации (Лекция, Практика, Лабораторная работа).
- **Lessons / Schedules**: Сами занятия (пары). Каждая запись связывает преподавателя, аудиторию, группу (или подгруппу), предмет (`subject_id`), тип занятия (`lesson_type`) и конкретное время.

View File

@@ -7,7 +7,16 @@ description: Деплой на удаленный сервер 192.168.1.87 (Git
Этот воркфлоу позволяет быстро обновить проект на удаленном сервере после того, как вы запушили изменения в Git.
// turbo-all
1. Синхронизировать код и перезапустить контейнеры:
1. Синхронизировать код и, если изменился init.sql, пересобрать базу данных:
```bash
ssh root@192.168.1.87 "cd /root/magistr/program/ && git fetch origin main && git reset --hard origin/main && docker compose up -d --build"
ssh root@192.168.1.87 "cd /root/magistr/program/ && \
git fetch origin main && \
CHANGED=\$(git diff --name-only HEAD origin/main | grep db/init/init.sql || true) && \
git reset --hard origin/main && \
if [ ! -z \"\$CHANGED\" ]; then \
echo 'Обнаружены изменения в init.sql, удаляем базу данных...'; \
docker compose down -v; \
sudo rm -rf db/data; \
fi && \
docker compose up -d --build"
```