Данный проект представляет собой backend-компонент образовательной платформы, предназначенной для взаимодействия между репетиторами и студентами. Система обеспечивает управление учебным процессом, включая создание и ведение классов, планирование уроков, выдачу и проверку домашних заданий, а также отслеживание успеваемости студентов.
- Разработать масштабируемую и надежную серверную часть для поддержки ключевых функций образовательной платформы.
- Обеспечить безопасную аутентификацию и авторизацию пользователей с разделением ролей.
- Реализовать API для взаимодействия с будущим frontend-приложением.
- Интегрировать внешние сервисы для хранения файлов и кэширования данных.
- Обеспечить атомарность операций и целостность данных через транзакции.
- Использовать современные практики разработки и проверенный технологический стек.
- Интеграция с Keycloak для аутентификации (JWT) и управления ролями (TUTOR, STUDENT).
- Хранение расширенных профилей пользователей в локальной базе данных, связанных с
keycloakUserId. - Возможность для пользователей (репетиторов, студентов) обновлять свои профильные данные (имя, фамилия).
- CRUD-операции для классов (создание, чтение, обновление, удаление) репетитором.
- Привязка класса к конкретному репетитору (связь
ManyToOne). - Управление списком студентов в классе (добавление/удаление, связь
ManyToMany).
- CRUD-операции для уроков в рамках класса.
- Поддержка однократных и повторяющихся уроков (с использованием формата iCalendar RRULE для правил повторения).
- Указание статуса урока (SCHEDULED, COMPLETED, CANCELLED).
- Возможность прикрепления файлов к урокам (материалы лекций, презентации и т.д.). Файлы хранятся в S3 (MinIO).
- CRUD-операции для домашних заданий, привязанных к уроку.
- Поддержка двух типов заданий: FILE_UPLOAD (студент загружает файл) и TEST (студент проходит тест).
- Установка дедлайнов для выполнения.
- Создание тестов:
- Формирование набора вопросов (
Question) для теста (Test). - Для каждого вопроса — создание вариантов ответов (
AnswerOption) с указанием правильного(ых).
- Формирование набора вопросов (
- Студенты могут просматривать назначенные им домашние задания.
- Для типа
FILE_UPLOAD: загрузка файла-ответа в S3 (MinIO). - Для типа
TEST: отображение вопросов/вариантов, прием ответов студента (сохраняются в формате JSONB). - Создание записи о сдаче (
HomeworkSubmission) с фиксацией времени, статуса (вовремя/с опозданием). - Репетиторы могут просматривать сданные работы, скачивать файлы, видеть ответы на тесты.
- Возможность выставления оценки (0-100) и предоставления текстовой обратной связи.
- Студенты имеют ограниченное количество "жизней" (по умолчанию 3).
- "Жизнь" теряется при сдаче домашнего задания после дедлайна или при несдаче к определенному моменту (реализован механизм проверки через
@Scheduledзадачу). - При достижении 0 "жизней" функциональность студента на платформе может быть ограничена (требуется вмешательство репетитора).
- Репетиторы могут предоставлять дополнительные "жизни" студентам и продлевать дедлайны для них (текущая реализация продления дедлайна для ДЗ изменяет общий дедлайн, отмечено как точка для улучшения).
- API для получения списка уроков в заданном временном диапазоне для календаря репетитора и студента.
- Интеграция с S3-совместимым хранилищем MinIO для всех пользовательских файлов (материалы уроков, сданные ДЗ).
- Генерация presigned URL для безопасного скачивания файлов.
- Использование Redis для кэширования часто запрашиваемых данных (детали уроков, профили, списки классов) для снижения нагрузки на БД и ускорения ответа API.
- Многослойная архитектура:
Controller: Прием HTTP-запросов, валидация входных данных (DTO), делегирование бизнес-логики сервисному слою.Service: Реализация бизнес-логики, управление транзакциями (@Transactional), взаимодействие с репозиториями и внешними сервисами.Repository: Абстракция доступа к данным с использованием Spring Data JPA.DTO (Data Transfer Objects): Используются для определения контрактов API, обеспечивая слабую связанность между слоями.
- Обработка исключений: Глобальный обработчик (
@RestControllerAdvice) для кастомных и стандартных исключений, возвращающий стандартизированные JSON-ответы об ошибках. - Аутентификация и Авторизация: На базе Spring Security OAuth2 Resource Server, интеграция с Keycloak для валидации JWT и извлечения ролей/информации о пользователе.
- Использование UUID v7: В качестве первичных ключей для большинства сущностей (кроме
User, где PK –keycloakUserId), генерируемых на стороне PostgreSQL с помощью расширенияpg_uuidv7, что обеспечивает хорошую производительность при вставке и хронологическую сортируемость. - Управление зависимостями и сборка: Gradle.
- Управление схемой БД: Liquibase с использованием SQL-формата для миграций.
- Язык программирования: Java 21
- Основной фреймворк: Spring Boot 3
- ORM: Spring Data JPA (Hibernate)
- База данных: PostgreSQL 16 (с расширением
pg_uuidv7) - Аутентификация и авторизация: Keycloak
- Кэш: Redis
- Файловое хранилище: S3-совместимое (MinIO).
- Миграции базы данных: Liquibase
- Библиотеки:
- Lombok: для сокращения шаблонного кода.
- MapStruct: для маппинга между DTO и сущностями.
- Hypersistence Utils: для улучшенной поддержки JSONB и других типов Hibernate.
- Контейнеризация: Docker, Docker Compose (для локальной разработки и развертывания стека).
- Реализация более гранулярных прав доступа (например, репетитор может редактировать только свои классы/уроки).
- Внедрение системы уведомлений (WebSocket, Email) для ключевых событий (новое ДЗ, сдача работы, получение оценки).
- Расширение функционала тестов (разные типы вопросов, лимиты по времени, автоматический подсчет баллов с учетом весов вопросов).
- Более гибкая система продления дедлайнов для домашних заданий (индивидуальные оверрайды для студентов).
- Оптимизация
@Scheduledзадач для обработки просроченных ДЗ на больших объемах данных. - Разработка административной панели для управления платформой.
- Полноценное покрытие кода тестами (юнит, интеграционные).