Поддержка чек-листов для задач в сервисе hwproj #641
Add this suggestion to a batch that can be applied as a single commit.
This suggestion is invalid because no changes were made to the code.
Suggestions cannot be applied while the pull request is closed.
Suggestions cannot be applied while viewing a subset of changes.
Only one suggestion per line can be applied in a batch.
Add this suggestion to a batch that can be applied as a single commit.
Applying suggestions on deleted lines is not supported.
You must change the existing code in this line in order to create a valid suggestion.
Outdated suggestions cannot be applied.
This suggestion has been applied or marked resolved.
Suggestions cannot be applied from pending reviews.
Suggestions cannot be applied on multi-line comments.
Suggestions cannot be applied while the pull request is queued to merge.
Suggestion cannot be applied right now. Please check back later.
Создание задачи и добавление критериев оценивания
На форме создания новой задачи добавлен блок критериев оценивания (чек-лист).
Если критерии ещё не заданы, отображается подсказка и кнопка «Добавить критерий оценивания».
Поле «Баллы» связано с критериями: при отсутствии критериев значение равно 0 и далее автоматически пересчитывается как сумма баллов по добавленным критериям.
Создание задачи и добавление критериев оценивания
В форме создания задачи можно добавлять несколько критериев: для каждого задаётся название и количество баллов.
Для удаления критерия предусмотрена кнопка с иконкой крестика справа от строки критерия.
Поле «Баллы» пересчитывается автоматически как сумма баллов по всем добавленным критериям (на скриншоте: 3 + 1 = 4).
Создание задачи и добавление критериев оценивания
Для каждого критерия можно указать название и количество баллов.
Блок «Критерии оценивания» сворачивается/разворачивается, чтобы не перегружать форму создания задачи.
Итоговое поле «Баллы» отображает суммарный балл задачи, вычисляемый на основе критериев.
Редактирование задачи: критерии по умолчанию свёрнуты
При открытии страницы редактирования/просмотра задачи блок с критериями оценивания отображается в свёрнутом виде по умолчанию.
Это уменьшает визуальную нагрузку на страницу и позволяет раскрывать критерии только при необходимости.
Доступ к блоку с критериями осуществляется через элемент раскрытия в шапке/панели задачи.
Страница решения с критериями оценивания
Если у задачи задан список критериев, на странице решения отображается отдельный блок с перечнем критериев и элементами для выставления оценки по каждому из них.
Для разных диапазонов баллов используются разные элементы ввода: «звёзды» для небольших значений, «лайк/дизлайк» для бинарной оценки и числовое поле для ввода произвольного значения.
Под списком критериев отображается суммарный балл по критериям (например, «Сумма по критериям: 0 из 4»), а также доступно поле для комментария преподавателя.
Оценивание решения по критериям
При выставлении оценки по критерию отображается визуальный индикатор выполнения (галочка слева от соответствующего критерия).
Суммарный балл пересчитывается автоматически и показывается в формате «Сумма по критериям: X из Y» (на скриншоте: 4 из 4).
Дополнительно доступно поле «Доп. оценка» для ручного ввода значения.
Отображение выставленной оценки по критериям
После сохранения оценки на странице решения отображается итоговый результат и таблица с детализацией по критериям.
В таблице показывается оценка по каждому критерию в формате «получено / максимум» (например, 2/3 и 1/1), а также значение «Доп. оценки».
Предусмотрена возможность пересмотра выставленных баллов через действие «Изменить оценку».
Краткое техническое описание изменений
Данные и связи:
Добавлена сущность/таблица Criterion для критериев оценивания.
Каждый критерий привязан к задаче по TaskId (связь «1 задача → N критериев»).
При удалении задачи связанные критерии удаляются каскадно.
Backend (API / модели):
Расширены модели задачи: теперь задача может возвращаться вместе со списком критериев (название, баллы и т.п.).
В получение задачи добавлен флаг, чтобы подгружать критерии только по запросу (не всегда).
Обновление задачи поддерживает сохранение критериев вместе с остальными полями задачи (добавление/удаление/изменение).
Frontend (интерфейс):
В редакторе задачи добавлен UI для критериев: добавить/удалить, задать название и баллы.
Итоговые «Баллы» задачи пересчитываются автоматически как сумма баллов всех критериев.
На странице решения отображается блок оценивания по критериям с суммой «X из Y» и возможностью изменить выставленную оценку.
UML: модель данных (Task — Criterion)
classDiagram direction LR class HomeworkTask { +long Id +List~Criterion~ Criterias } class Criterion { +long Id +long TaskId +string Name +int Points +string? Type } HomeworkTask "1" --> "0..*" Criterion : TaskIdUML: ViewModel / DTO для задач и критериев
classDiagram direction LR class HomeworkTaskViewModel { +long Id +List~CriterionViewModel~ Criterias } class CriterionViewModel { +long Id +string Name +int Points +string? Type } class CreateTaskViewModel { +List~CriterionViewModel~ Criterias } class EditTaskViewModel CreateTaskViewModel <|-- EditTaskViewModel HomeworkTaskViewModel "1" --> "0..*" CriterionViewModelER-диаграмма базы данных
erDiagram HOMEWORK_TASK ||--o{ CRITERION : has HOMEWORK_TASK { bigint Id PK } CRITERION { bigint Id PK bigint TaskId FK string Name int Points string Type "nullable" }Sequence: получение задачи с критериями (withCriterias)
sequenceDiagram autonumber participant UI as Frontend participant GW as API Gateway participant CS as CoursesService UI->>GW: GET /tasks/get/{taskId}?withCriterias=true GW->>CS: GET /tasks/get/{taskId}?withCriterias=true CS->>CS: GetTaskAsync(taskId, withCriterias=true) CS-->>GW: HomeworkTaskViewModel (+Criterias) GW-->>UI: HomeworkTaskViewModel (+Criterias)Sequence: обновление задачи вместе с критериями
sequenceDiagram autonumber participant UI as Frontend participant GW as API Gateway participant CS as CoursesService participant DB as Database UI->>GW: PUT /tasks/update/{taskId} (EditTaskViewModel + Criterias) GW->>CS: PUT /tasks/update/{taskId} (EditTaskViewModel + Criterias) CS->>DB: Update task fields CS->>DB: Upsert criterias (add/update) CS->>DB: Delete removed criterias DB-->>CS: OK CS-->>GW: 200 OK GW-->>UI: 200 OK