feat(materials): Фаза 6b — раздатка материала ученикам/классу
- POST /api/materials/:id/share {classId|userId} (teacher/admin): создаёт независимую КОПИЮ
материала каждому ученику класса (source_title «Раздатка: <учитель>») + уведомление через SSE.
- /my-materials: кнопка «Раздать» на карточках (видна учителю/админу) → выбор класса.
- Хелпер LS.shareMaterial. На этом план «Мои материалы» (6 фаз) завершён.
Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -1048,7 +1048,7 @@ window.LS = {
|
||||
crJoin, crLeave, crSendChat, crGetChat, crGetAttendance, crSignal, crGetOnlineStudents, crGetMySession,
|
||||
crGetMyHistory, crGetClassHistory, crGetSessionSummary, crExportChatUrl, crGetAllNotes, crDeleteHistory,
|
||||
crAdminGetAllHistory, crAdminGetTeachersList,
|
||||
listMaterials, saveMaterial, updateMaterial, deleteMaterial,
|
||||
listMaterials, saveMaterial, updateMaterial, deleteMaterial, shareMaterial,
|
||||
createMaterialCollection, updateMaterialCollection, deleteMaterialCollection,
|
||||
fcListDecks, fcCreateDeck, fcAddCard,
|
||||
escapeHtml, esc,
|
||||
@@ -1249,6 +1249,7 @@ async function listMaterials() { return req('GET', '/materials'); }
|
||||
async function saveMaterial(data) { return req('POST', '/materials', data); }
|
||||
async function updateMaterial(id, d) { return req('PATCH', `/materials/${id}`, d); }
|
||||
async function deleteMaterial(id) { return req('DELETE', `/materials/${id}`); }
|
||||
async function shareMaterial(id, d) { return req('POST', `/materials/${id}/share`, d); }
|
||||
async function createMaterialCollection(d) { return req('POST', '/materials/collections', d); }
|
||||
async function updateMaterialCollection(id,d){ return req('PATCH', `/materials/collections/${id}`, d); }
|
||||
async function deleteMaterialCollection(id) { return req('DELETE', `/materials/collections/${id}`); }
|
||||
|
||||
Reference in New Issue
Block a user