fix(materials): аннотация фото перезаписывает материал, а не плодит копии

Рисование поверх существующего материала (annotate) теперь обновляет ту же
запись (LS.updateMaterial url), а не создаёт новую. На бэкенде PATCH
/api/materials/:id разрешает менять поле url. Кнопка «Рисунок» (новый с нуля)
по-прежнему создаёт новый материал.

Co-Authored-By: Claude Opus 4.8 (1M context) <noreply@anthropic.com>
This commit is contained in:
Maxim Dolgolyov
2026-06-04 14:45:01 +03:00
parent ed50cb49e5
commit 423c1001e4
2 changed files with 11 additions and 4 deletions
@@ -66,7 +66,7 @@ function create(req, res) {
}
/* PATCH /api/materials/:id — rename / edit one of the current user's items.
Editable: title, body. (collection_id/tags wired in a later phase.) */
Editable: title, body, url (e.g. re-saving an annotated image), collection_id, tags. */
function update(req, res) {
const row = db.prepare('SELECT user_id FROM student_materials WHERE id = ?').get(req.params.id);
if (!row) return res.status(404).json({ error: 'not found' });
@@ -75,6 +75,7 @@ function update(req, res) {
const fields = [], args = [];
if (b.title !== undefined) { fields.push('title = ?'); args.push(String(b.title || '').slice(0, 300)); }
if (b.body !== undefined) { fields.push('body = ?'); args.push(b.body != null ? String(b.body).slice(0, 60000) : null); }
if (b.url !== undefined) { fields.push('url = ?'); args.push(b.url != null ? String(b.url).slice(0, 2000) : null); }
if (b.collection_id !== undefined) { fields.push('collection_id = ?'); args.push(ownCollectionId(b.collection_id, req.user.id)); }
if (b.tags !== undefined) { fields.push('tags = ?'); args.push(b.tags != null ? String(b.tags).slice(0, 500) : null); }
if (!fields.length) return res.json({ ok: true });