feat: закрыть остаточные P1/P2 по профилю, когорте и ведомости
- профиль приведён к docs/09: variant/level, updatedBy/name, лимит попыток - V14: NOT NULL и полная уникальность когорты, preflight legacy-групп - возврат группы из архива и история членства на странице группы - пагинация групп и плоского списка материалов - пакетные сдачи ведомости одним запросом - XLSX-preflight импорта и audit-тесты ростера - LDD: 66 claims, 398 тестов, release PASS
This commit is contained in:
@@ -151,7 +151,9 @@ Authorization: Bearer <JWT>
|
||||
`grade.generalComment`; отдельные комментарии — массив `comments`.
|
||||
- `author` может быть `null`, если автор не сохранён (старые данные).
|
||||
- `averageScore` — среднее по выставленным оценкам, `null` если оценок нет.
|
||||
- `submissions` отсортированы по `seq`; файлы — имена без пути.
|
||||
- `submissions` — последние попытки по убыванию `seq`, по умолчанию не более
|
||||
50 (`submissionLimit`, максимум 500); `submissionsTotal` — всего попыток,
|
||||
`attemptsCount` — тоже полное число. Файлы — имена без пути.
|
||||
- `downloadUrl` относительный; web-BFF добавляет авторизацию.
|
||||
|
||||
## 4. Скачивание попытки
|
||||
@@ -244,7 +246,9 @@ GET /api/v1/internal/courses/{courseId}/labs
|
||||
- защиты — `defense_sessions` по `student_id` и `lab_id IN (...)`;
|
||||
- публикации — `grade_publications`/`grade_publication_students` по группе и лабам.
|
||||
- Список лаб курса кэшируется на время запроса.
|
||||
- Для больших курсов — пагинация попыток (по умолчанию все, но с лимитом).
|
||||
- Для больших курсов — лимит попыток: `submissionLimit` (по умолчанию 50,
|
||||
максимум 500) и `submissionsTotal` для индикатора «показаны последние N»;
|
||||
`attemptsCount` не зависит от лимита.
|
||||
- Индексы: `submissions(student_id, lab_id, seq)` уже уникален;
|
||||
`grade_comments(student_id, lab_id)` уже есть; `lab_grades(lab_id)` добавлен;
|
||||
`defense_sessions(student_id, lab_id)` уникален.
|
||||
@@ -273,7 +277,9 @@ GET /api/v1/internal/courses/{courseId}/labs
|
||||
- Аноним — `401`.
|
||||
- Скачивание своей попытки — `200`; чужой — `403`.
|
||||
- Студент не видит неопубликованные оценки/комментарии.
|
||||
- Все попытки возвращаются, а не только последняя.
|
||||
- Все попытки возвращаются (в пределах `submissionLimit`), а не только последняя;
|
||||
`submissionsTotal`/`attemptsCount` показывают полное число.
|
||||
- Профиль на 10 лабораторных делает не более 15 SQL-запросов (без N+1).
|
||||
- Комментарии содержат автора или `null`.
|
||||
- Запрос не делает N+1 (проверка по числу SQL-запросов в интеграционном тесте).
|
||||
|
||||
|
||||
Reference in New Issue
Block a user