5a4bc48027
Новый read-only эндпоинт GET /api/classes/:id/outstanding (teacher/admin, ownership): по каждому ученику класса — его незакрытые задания (классовые + личные от этого учителя) со статусом не начато / в процессе / на доработке / просрочено и дедлайном. Логика «сдано» совпадает с /homework (тест — завершён/исчерпаны попытки; учебник — всё прочитано; загрузка/файл — есть сдача не на доработке). Общий запрос вынесен в assignmentRowsForUser(uid) — им же теперь питается /assignments/my (поведение не изменилось, +поле created_by). Фронт (classes.html): вкладка «Долги» в карточке класса — сводка «должников X из Y, просрочено Z», по каждому должнику карточка со статус-чипами и списком зависших заданий; бейдж с числом просрочек на вкладке. Удаление прямо из списка: личное → «у ученика», классовое → «у всего класса» (через DELETE /assignments/:id, ownership на бэке). Verified: classOutstanding смоук на живой БД (14 учеников/58 позиций/42 просрочено, ownership 403/404/admin); node --check; lint:routes 0. Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>