Files
magistr/.agent/rules/main.md

10 KiB
Raw Blame History

trigger
trigger
always_on

Контекст проекта: Система расписания университета

Обзор проекта

Этот проект представляет собой веб-сайт системы управления университетским расписанием.

  • Роль: Образовательная платформа для управления расписанием.
  • Язык: Смешанный (Java Backend + Web Frontend).
  • Публичный URL: https://magistr.zuev.company

Структура директорий и обязанности

Проект следует определенной структуре папок. Вы должны придерживаться этих путей:

  • backend/: Содержит исходный код бэкенд-приложения на Java.

    • При работе с API или серверной логикой фокусируйтесь здесь.
  • frontend/: Содержит исходный код фронтенда. Обратите внимание на строгое разделение ролей:

    • frontend/admin/: Код, специфичный для интерфейса Администратора.
    • frontend/teacher/: Код, специфичный для интерфейса Преподавателя.
    • frontend/student/: Код, специфичный для интерфейса Студента.
    • Ограничение: Не смешивайте логику между этими папками, если только не создаете общую утилиту.
  • db/: Конфигурация и данные базы данных.

    • db/init/init.sql: SQL-скрипт, отвечающий за создание и инициализацию схемы базы данных (таблицы, начальные данные).
  • Корневые файлы:

    • compose.yaml: Конфигурация Docker Compose. Этот файл определяет сервисы (бэкенд, БД, фронтенд-серверы) и то, как они работают вместе.
    • .env: Переменные окружения. Содержит конфиденциальные настройки (пароли БД, порты, ключи API).

Внешние зависимости (родительская директория)

Некоторые компоненты инфраструктуры расположены за пределами корня проекта:

  • ../caddy-proxy/: Находится на один уровень выше относительно корня проекта.
    • Роль: Реверс-прокси, обрабатывающий трафик для magistr.zuev.company.
    • Caddyfile: Конфигурация для маршрутизации и SSL.
    • compose.yaml: Отдельный файл Docker Compose специально для службы прокси.

Рекомендации по рабочему процессу

  1. Изменения в базе данных: Если вам нужно изменить схему базы данных, вы должны обновить db/init/init.sql, чтобы изменения сохранялись при пересборке контейнера.
  2. Конфигурация: Если вы добавляете новые параметры конфигурации, добавьте их в .env и сошлитесь на них в compose.yaml или коде приложения.
  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) и конкретное время.