Skip to content

Alexander21040868/course-project

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

20 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

CodeQuest

CodeQuest — веб-платформа, на которой студенты в игровой форме учатся программировать на языке C. Преподаватель выкладывает уроки-«подземелья» с задачами, студент пишет решение прямо в браузере, а платформа сама компилирует и запускает код в изолированной Docker-песочнице, сверяет результат с эталоном и начисляет опыт. За решённые задачи даются уровни и достижения, есть рейтинг, соревнования и учебные группы.

Проект выполнен как командная курсовая(НИУ ВШЭ, факультет компьютерных наук, ОП «Дизайн и разработка информационных продуктов»).

Что умеет платформа

Студент

  • регистрируется и входит, выбирая роль студента или преподавателя;
  • видит личный кабинет: опыт, уровень, рейтинг, серию активности и достижения;
  • проходит уроки и решает задачи в редакторе кода с подсветкой синтаксиса;
  • отправляет решения на автоматическую проверку и смотрит историю своих посылок;
  • участвует в соревнованиях, поднимается в рейтинге, читает статьи и получает уведомления.

Преподаватель

  • создаёт и редактирует уроки, задачи (условие, шаблон кода, тесты) и статьи;
  • ведёт учебные группы: приглашает студентов и распределяет их по подгруппам;
  • видит таблицу прогресса — кто из учеников какие задачи решил;
  • проводит соревнования и управляет всем контентом из админ-панели «Штаб мастера».

Архитектура

Приложение построено по классической клиент-серверной схеме. Браузер общается с сервером по REST API в формате JSON, а на сервере выделены три слоя: контроллеры принимают запросы, сервисы содержат бизнес-логику, репозитории отвечают за работу с базой данных. Выполнение пользовательского кода вынесено в отдельную Docker-песочницу, а доступ к API защищён JWT-аутентификацией.

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

Как проверяется код

Это главная техническая часть платформы — безопасный запуск чужого, заранее неизвестного кода. Когда студент отправляет решение, сервер не выполняет его напрямую, а поднимает изолированный Docker-контейнер с компилятором gcc:14, компилирует и запускает программу внутри него, после чего сравнивает её вывод с эталонным (с учётом тест-кейсов задачи).

Контейнер запускается без доступа к сети, с ограничениями по памяти, процессору и времени выполнения, и удаляется сразу после проверки — даже намеренно вредоносный код не навредит серверу. По результату студенту начисляется опыт, а посылка со всем исходным кодом сохраняется в истории.

Технологии

Серверная часть написана на Java 17 и Spring Boot 3.2.5 (Spring MVC, Data JPA, Security). Данные хранятся в PostgreSQL (в разработке — H2), а схема базы версионируется миграциями Flyway. Решения пользователей проверяются в Docker на образе gcc:14. За безопасность отвечают JWT-аутентификация и хеширование паролей BCrypt. Клиентская часть — HTML, CSS и JavaScript с редактором кода CodeMirror и разметкой marked.js. Документация API доступна через Swagger (OpenAPI).

Как запустить

Понадобятся JDK 17, Maven и Docker (нужен для проверки решений).

Написать в директории проекта в терминале (нужен запущенный Docker Desktop):

docker compose up --build

После запуска:

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

src/main/java/org/example/
  controller/    — REST API
  service/       — бизнес-логика
  repository/    — доступ к данным (Spring Data JPA)
  entity/        — сущности базы данных
  config/        — безопасность, JWT, инициализация
src/main/resources/
  static/        — фронтенд (HTML, CSS, JS)
  db/migration/  — миграции схемы (Flyway)
  application.yml
src/test/         — автоматические тесты

Модель данных

В основе платформы — реляционная база из 16 таблиц: пользователи и их достижения, учебные группы и приглашения, уроки, задачи и тест-кейсы, посылки, соревнования, статьи и уведомления. Схема и связи между таблицами:

Схема базы данных

REST API

Клиент работает с сервером через REST API. Полный список методов с описанием и возможностью отправить запрос прямо из браузера доступен в Swagger UI (/swagger-ui.html). Основные группы:

  • /api/auth — регистрация и вход;
  • /api/lessons, /api/tasks — уроки и задачи;
  • /api/submissions — отправка решений и история посылок;
  • /api/challenges, /api/leaderboard — соревнования и рейтинг;
  • /api/profile, /api/notifications — личный кабинет и уведомления;
  • /api/admin/** — управление контентом и группами (для преподавателя).

Тестирование

Серверная логика покрыта автоматическими тестами на JUnit 5 и Spring Boot Test — от бизнес-логики сервисов до проверки REST API и работы Docker-песочницы. Запуск:

mvn test

Распределение работ

Над проектом работали двое.

Перванов А. С. — архитектура и каркас приложения, база данных, регистрация и авторизация, учебные группы, доступ к урокам, рейтинговая система, соревнования и отслеживание прогресса студентов.

Еркаев К. С. — личный кабинет и создание учебного контента, проверка решений в Docker-песочнице, подсветка синтаксиса, редактирование и каскадное удаление контента, статьи, уведомления и документация API.

Автоматические тесты писали совместно.

Авторы

Перванов Александр Сергеевич и Еркаев Кирилл Сергеевич, группа БДРИП241. Научный руководитель — Лесовская Ирина Николаевна.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors