feat(db): update init.sql with subjects, lesson types, classrooms, and schedules tables
This commit is contained in:
@@ -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`) и конкретное время.
|
||||
@@ -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"
|
||||
```
|
||||
|
||||
Reference in New Issue
Block a user