CodeQuest — веб-платформа, на которой студенты в игровой форме учатся программировать на языке C. Преподаватель выкладывает уроки-«подземелья» с задачами, студент пишет решение прямо в браузере, а платформа сама компилирует и запускает код в изолированной Docker-песочнице, сверяет результат с эталоном и начисляет опыт. За решённые задачи даются уровни и достижения, есть рейтинг, соревнования и учебные группы.
Проект выполнен как командная курсовая(НИУ ВШЭ, факультет компьютерных наук, ОП «Дизайн и разработка информационных продуктов»).
Студент
- регистрируется и входит, выбирая роль студента или преподавателя;
- видит личный кабинет: опыт, уровень, рейтинг, серию активности и достижения;
- проходит уроки и решает задачи в редакторе кода с подсветкой синтаксиса;
- отправляет решения на автоматическую проверку и смотрит историю своих посылок;
- участвует в соревнованиях, поднимается в рейтинге, читает статьи и получает уведомления.
Преподаватель
- создаёт и редактирует уроки, задачи (условие, шаблон кода, тесты) и статьи;
- ведёт учебные группы: приглашает студентов и распределяет их по подгруппам;
- видит таблицу прогресса — кто из учеников какие задачи решил;
- проводит соревнования и управляет всем контентом из админ-панели «Штаб мастера».
Приложение построено по классической клиент-серверной схеме. Браузер общается с сервером по REST API в формате JSON, а на сервере выделены три слоя: контроллеры принимают запросы, сервисы содержат бизнес-логику, репозитории отвечают за работу с базой данных. Выполнение пользовательского кода вынесено в отдельную Docker-песочницу, а доступ к API защищён JWT-аутентификацией.
Это главная техническая часть платформы — безопасный запуск чужого, заранее неизвестного кода. Когда студент отправляет решение, сервер не выполняет его напрямую, а поднимает изолированный 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После запуска:
- веб-приложение — http://localhost:8080
- документация API (Swagger UI) — http://localhost:8080/swagger-ui.html
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. Полный список методов с описанием и возможностью отправить запрос прямо из браузера доступен в 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. Научный руководитель — Лесовская Ирина Николаевна.

