Skip to content

timkazy/Schedule

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

66 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

Расписание (Schedule)

Информационная система планирования и генерации учебного расписания для учебного заведения


📋 О проекте

Schedule — это полнофункциональная клиент-серверная система для автоматизации управления учебным расписанием. Проект разработан в рамках предмета «Администрирование информационных систем» и охватывает полный цикл разработки: от проектирования БД до развёртывания и нагрузочного тестирования.

🔧 Технологический стек

Компонент Технологии
Backend Python 3.12, FastAPI, SQLAlchemy (ORM), Pydantic
Frontend React 19, React Router, Axios, TailwindCSS, Vite
База данных SQLite
Аутентификация JWT (PyJWT), bcrypt
Тестирование pytest, JMeter
Развёртывание Nginx, VirtualBox, Debian

📦 Структура проекта

Schedule/
├── backend/              # Серверная часть (FastAPI)
│   ├── main.py           # Точка входа, 78 REST API эндпоинтов
│   ├── repository/       # Слой доступа к данным
│   │   ├── models.py     # 15 ORM-моделей SQLAlchemy
│   │   ├── schemas.py    # Pydantic-схемы валидации
│   │   ├── crud.py       # CRUD-операции
│   │   ├── auth.py       # Аутентификация и JWT
│   │   ├── schedule_generator.py  # Генерация расписания
│   │   └── initializer.py # Инициализация БД
│   └── tests/            # Автоматизированные тесты
├── frontend/             # Клиентская часть (React)
│   ├── src/
│   │   ├── api/          # API-слой (78 методов)
│   │   ├── components/   # UI-компоненты
│   │   ├── pages/        # Страницы приложения
│   │   ├── context/      # Управление состоянием
│   │   └── utils/        # Утилиты
│   └── package.json
├── config.env            # Конфигурация окружения
├── requirements.txt      # Python-зависимости
└── start.bat             # Скрипт запуска проекта

✨ Возможности системы

Для студентов:

  • Просмотр расписания по взводам и дням недели
  • Фильтрация по предметам и преподавателям
  • Экспорт расписания

Для преподавателей:

  • Полное управление расписанием (CRUD)
  • Редактирование ячеек расписания (предмет, аудитория, тема)
  • Массовые операции: копирование/вставка между ячейками
  • Генерация расписания на основе учебного плана
  • Управление взводами, дисциплинами, нагрузками
  • Управление преподавательским составом и аудиториями

Системные функции:

  • Ролевая модель доступа (студент / преподаватель)
  • JWT-аутентификация
  • Автоматическая генерация документации API (Swagger/ReDoc)
  • Валидация данных и обработка ошибок
  • Интеграционное и нагрузочное тестирование

📊 Архитектура

Система построена по клиент-серверной архитектуре с чётким разделением ответственности:

  • Backend: RESTful API на FastAPI (78 эндпоинтов)
  • Frontend: SPA на React с централизованным управлением состоянием
  • Бизнес-логика: Генерация расписания, каскадное удаление, оптимистичные обновления

Описание проекта

# Запуск всего проекта
./start.bat

Запуск отдельно backend-а

Для Windows:

# Создание виртуального окружения
python -m venv backend/venv
# Активация виртуального окружения
backend\venv\Scripts\activate
# Накат необходимых зависимостей
pip install -r requirements.txt
# Запуск главного файла
python backend/main.py

Для Linux:

# Создание виртуального окружения
# python -m venv backend/venv
# Активация виртуального окружения
source venv/bin/activate
# Накат необходимых зависимостей
pip install -r requirements.txt
# Запуск главного файла
cd ./backend
uvicorn main:app --reload

Запуск отдельно frontend-а

Для этого необходимо скачать node.js https://nodejs.org/en/download Версия 22.21.1 (LTS) После установки в директории проекта

cd .\frontend\
# Установка зависимостей
npm install
# Запуск проекта
npm run dev

Working with Git

В случае необходимости слития наработок из своей ветки:

  1. Создать Pull-requests
  2. Описать ревьюеров, получить их Accept
  3. Слить в новую ветку, удалив исходную
  4. Удалить смерженную ветку локально
  5. Переключиться на main-ветку локально и создать новую ветку для будущих задач

Алгоритм слияния:

  1. git checkout main - убедиться что локальная main ветка актуальна.
  2. git pull origin main - актуализировать main, чтобы избежать конфликтов.
  3. git checkout <ветка> - переключиться на свою ветку.
  4. git merge main - слияние с main. Если возникнут конфликты - разрешить вручную.
  5. git push origin <ветка> - отправить в github.
  6. Создать Pull-request
  7. git checkout main - переключиться на ветку main если еще не здесь.
  8. git branch -d <ветка> - удалить ветку локально.

About

Automated schedule management system | FastAPI • React • SQLAlchemy • Pydantic • JWT

Topics

Resources

Stars

Watchers

Forks

Contributors