Skip to content

qutha/lms-hw

Repository files navigation

Learning Management System (LMS)

Описание

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

  • Управление курсами: создание курсов с модулями и уроками, организация по категориям
  • Управление пользователями: регистрация студентов и преподавателей, управление профилями
  • Запись на курсы: студенты могут записываться на курсы и отслеживать свой прогресс
  • Обучающие материалы: размещение уроков, заданий и материалов в рамках курсов
  • Тестирование: создание тестов с вопросами и вариантами ответов, автоматическая проверка
  • Выполнение заданий: студенты могут отправлять выполненные задания на проверку
  • Система отзывов: возможность оставлять отзывы и оценки курсам

Архитектура

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

  • Backend: Java, Spring Boot, Spring Data JPA, Hibernate
  • База данных: PostgreSQL
  • Миграции: Flyway
  • Сборка: Maven
  • Контейнеризация: Docker, Docker Compose

Слои приложения

  • Controller Layer (Контроллеры)

    • Обработка HTTP-запросов и маршрутизация
    • Валидация входных данных
    • Формирование HTTP-ответов
    • Прямое взаимодействие с Repository Layer
  • Repository Layer (Слой доступа к данным)

    • Взаимодействие с базой данных через JPA/Hibernate
    • CRUD операции над сущностями
  • DTO (Data Transfer Objects) - объекты для передачи данных между слоями

  • Mapper - преобразование между Entity и DTO

  • Model/Entity - JPA-сущности, представляющие таблицы БД

  • Exception - обработка исключений

Примечание о Service Layer: В текущей реализации слой сервисов не используется, так как вся логика представляет собой простые CRUD операции. Создание дополнительного слоя абстракции без реальной бизнес-логики привело бы к избыточности кода. Как только появится настоящая бизнес-логика (сложные транзакции, валидация правил, координация между несколькими репозиториями), контроллеры будут рефакторены для использования Service Layer вместо прямого обращения к репозиториям.

REST API

Приложение предоставляет RESTful API со следующими основными группами эндпоинтов:

  • Пользователи (/api/users)
  • Категории (/api/categories)
  • Курсы (/api/courses)
  • Модули (/api/modules)
  • Уроки (/api/lessons)
  • Задания (/api/assignments)
  • Тесты (/api/quizzes)
  • Записи на курсы (/api/enrollments)
  • Отзывы (/api/reviews)

DevOps

Реализованы следующие GitHub Actions workflows:

CI (Continuous Integration)

Файл: .github/workflows/ci.yml

Триггеры:

  • Push в ветки master, dev
  • Pull Request в ветки master, dev
  • Ручной запуск (workflow_dispatch)

Процесс:

  1. Разворачивание PostgreSQL в Docker контейнере для тестов
  2. Сборка проекта с Maven (./mvnw clean compile)
  3. Запуск всех тестов с подключением к тестовой БД
  4. Упаковка приложения в JAR файл
  5. Сохранение артефакта (JAR файл) на 7 дней
  6. Генерация отчета о тестировании

CD (Continuous Deployment)

Файл: .github/workflows/cd.yml

Триггеры:

  • Push в ветки master, dev (отключен)
  • Pull Request в ветки master, dev (отключен)
  • Ручной запуск (workflow_dispatch) с опциональным указанием тега Docker образа

Процесс:

  1. Сборка проекта с Maven (./mvnw clean package)
  2. Настройка Docker Buildx для мультиплатформенной сборки
  3. Авторизация в Docker Hub
  4. Извлечение метаданных для тегирования образа (ветка, версия, SHA коммита)
  5. Сборка и публикация Docker образа в Docker Hub с несколькими тегами
  6. Создание GitHub Release при публикации тега версии

Code Quality (Качество кода)

Файл: .github/workflows/code-quality.yml

Триггеры:

  • Push в ветки master, dev
  • Pull Request в ветки master, dev
  • Ручной запуск (workflow_dispatch)

Процесс:

  1. Анализ кода с помощью SonarCloud (покрытие тестами, код смеллы, уязвимости)
  2. Проверка стиля кода с помощью Checkstyle
  3. Статический анализ кода с помощью SpotBugs (поиск багов и потенциальных проблем)

Dependency Review (Проверка зависимостей)

Файл: .github/workflows/dependency-review.yml

Триггеры:

  • Pull Request в ветки master, dev

Процесс:

  1. Проверка добавленных зависимостей на наличие известных уязвимостей
  2. Блокировка PR при обнаружении уязвимостей уровня moderate и выше
  3. Автоматическое добавление комментария с результатами в Pull Request

Запуск проекта

Создать .env по шаблону .env.template (если хотите поменять значения по умолчанию)

Выполнить команду:

docker compose up -d --build

Сервер будет доступен по адресу http://localhost:8080/. Также при запуске автоматически добавятся тестовые данные.

Запуск тестов

Для запуска тестов выполните команду:

./mvnw test

Или на Windows:

mvnw.cmd test

Для запуска с подробным выводом:

./mvnw test -Dspring.profiles.active=test

Результат тестов

tests.png

Доступные эндпоинты

Пользователи

  • GET /api/users - Получить всех пользователей
  • GET /api/users/{id} - Получить пользователя по ID
  • GET /api/users/email/{email} - Получить пользователя по email
  • POST /api/users - Создать пользователя
  • PUT /api/users/{id} - Обновить пользователя
  • DELETE /api/users/{id} - Удалить пользователя

Категории

  • GET /api/categories - Получить все категории
  • GET /api/categories/{id} - Получить категорию по ID
  • GET /api/categories/name/{name} - Получить категорию по имени
  • POST /api/categories - Создать категорию
  • PUT /api/categories/{id} - Обновить категорию
  • DELETE /api/categories/{id} - Удалить категорию

Курсы

  • GET /api/courses - Получить все курсы
  • GET /api/courses/{id} - Получить курс по ID
  • GET /api/courses/teacher/{teacherId} - Получить курсы преподавателя
  • GET /api/courses/category/{categoryId} - Получить курсы по категории
  • GET /api/courses/category/name/{categoryName} - Получить курсы по названию категории
  • POST /api/courses - Создать курс
  • PUT /api/courses/{id} - Обновить курс
  • DELETE /api/courses/{id} - Удалить курс

Записи на курсы

  • GET /api/enrollments - Получить все записи
  • GET /api/enrollments/{id} - Получить запись по ID
  • GET /api/enrollments/student/{studentId} - Получить записи студента
  • GET /api/enrollments/course/{courseId} - Получить записи на курс
  • GET /api/enrollments/student/{studentId}/course/{courseId} - Получить запись студента на курс
  • POST /api/enrollments - Создать запись на курс
  • PUT /api/enrollments/{id} - Обновить запись
  • DELETE /api/enrollments/{id} - Удалить запись

Модули курсов

  • GET /api/modules - Получить все модули
  • GET /api/modules/{id} - Получить модуль по ID
  • GET /api/modules/course/{courseId} - Получить модули курса
  • POST /api/modules - Создать модуль
  • PUT /api/modules/{id} - Обновить модуль
  • DELETE /api/modules/{id} - Удалить модуль

Уроки

  • GET /api/lessons - Получить все уроки
  • GET /api/lessons/{id} - Получить урок по ID
  • GET /api/lessons/module/{moduleId} - Получить уроки по модулю
  • POST /api/lessons - Создать урок
  • PUT /api/lessons/{id} - Обновить урок
  • DELETE /api/lessons/{id} - Удалить урок

Задания

  • GET /api/assignments - Получить все задания
  • GET /api/assignments/{id} - Получить задание по ID
  • GET /api/assignments/lesson/{lessonId} - получить задания урока
  • POST /api/assignments - Создать задание
  • PUT /api/assignments/{id} - Обновить задание
  • DELETE /api/assignments/{id} - Удалить задание

Отправки работ

  • GET /api/submissions - Получить все отправки работ
  • GET /api/submissions/{id} - Получить отправку по ID
  • GET /api/submissions/assignment/{assignmentId} - Получить отправки по заданию
  • GET /api/submissions/student/{studentId} - Получить отправки студента
  • GET /api/submissions/assignment/{assignmentId}/student/{studentId} - Получить отправку студента по заданию
  • POST /api/submissions - Создать отправку работы
  • PUT /api/submissions/{id} - Обновить отправку
  • DELETE /api/submissions/{id} - Удалить отправку

Тесты

  • GET /api/quizzes - Получить все тесты
  • GET /api/quizzes/{id} - Получить тест по ID
  • GET /api/quizzes/module/{moduleId} - Получить тест модуля
  • POST /api/quizzes - Создать тест
  • PUT /api/quizzes/{id} - Обновить тест
  • DELETE /api/quizzes/{id} - Удалить тест

Вопросы тестов

  • GET /api/questions - Получить все вопросы
  • GET /api/questions/{id} - Получить вопрос по ID
  • GET /api/questions/quiz/{quizId} - Получить вопросы теста
  • POST /api/questions - Создать вопрос
  • PUT /api/questions/{id} - Обновить вопрос
  • DELETE /api/questions/{id} - Удалить вопрос

Варианты ответов

  • GET /api/answer-options - Получить все варианты ответов
  • GET /api/answer-options/{id} - Получить вариант ответа по ID
  • GET /api/answer-options/question/{questionId} - Получить варианты ответов вопроса
  • POST /api/answer-options - Создать вариант ответа
  • PUT /api/answer-options/{id} - Обновить вариант ответа
  • DELETE /api/answer-options/{id} - Удалить вариант ответа

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

  • GET /api/quiz-submissions - Получить все отправки тестов
  • GET /api/quiz-submissions/{id} - Получить отправку теста по ID
  • GET /api/quiz-submissions/student/{studentId} - Получить отправки тестов студента
  • GET /api/quiz-submissions/quiz/{quizId} - Получить отправки по тесту
  • GET /api/quiz-submissions/quiz/{quizId}/student/{studentId} - Получить отправку студента по тесту
  • POST /api/quiz-submissions - Создать отправку теста
  • PUT /api/quiz-submissions/{id} - Обновить отправку теста
  • DELETE /api/quiz-submissions/{id} - Удалить отправку теста

Отзывы о курсах

  • GET /api/reviews - Получить все отзывы
  • GET /api/reviews/{id} - Получить отзыв по ID
  • GET /api/reviews/course/{courseId} - Получить отзывы по курсу
  • GET /api/reviews/student/{studentId} - Получить отзывы студента
  • POST /api/reviews - Создать отзыв
  • PUT /api/reviews/{id} - Обновить отзыв
  • DELETE /api/reviews/{id} - Удалить отзыв

Сущности

  1. AnswerOption
  2. Assignment
  3. Category
  4. Course
  5. CourseModule
  6. CourseReview
  7. CourseSchedule
  8. Enrollment
  9. Lesson
  10. Material
  11. Notification
  12. Profile
  13. Question
  14. Quiz
  15. QuizSubmission
  16. Submission
  17. Tag
  18. User

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

No releases published

Packages

 
 
 

Contributors