openvibers/openvibe.design Commits
/api/v1/glyphs/drafts carries each draft's solid twin (#99)
Changes
@@@ -230,7 +230,7 @@ function createIconRoutes(ctx) {if (status !== 'approved' && !isAdmin(req)) return problem(res, req, 403, 'design.glyph_drafts_private', 'Only approved drafts are public.');if (!['approved', 'draft', 'rejected'].includes(status)) return problem(res, req, 422, 'design.invalid', 'status is approved, draft or rejected.');const rows = await drafts.list({ status, limit: 500 });-- res.set('Cache-Control', status === 'approved' ? 'public, max-age=300' : 'private, no-store').json({ drafts: rows.map((d) => ({ id: d.id, name: d.name, sentence: d.sentence, svg: d.svg, model: d.model, status: d.status, created_at: d.created_at, reviewed_at: d.reviewed_at })) });++ res.set('Cache-Control', status === 'approved' ? 'public, max-age=300' : 'private, no-store').json({ drafts: rows.map((d) => ({ id: d.id, name: d.name, sentence: d.sentence, svg: d.svg, solid_svg: d.solid_svg || null, model: d.model, status: d.status, created_at: d.created_at, reviewed_at: d.reviewed_at })) });});return r;}@@@ -219,6 +219,7 @@ const form = (fields) => ({ body: new URLSearchParams(fields).toString(), headerassert.equal(list[0].name, 'hot-tub');assert.equal(list[0].status, 'approved');assert.ok(clean(list[0].svg).ok, 'what is served passed the validator');++ assert.ok('solid_svg' in list[0], 'each draft carries its solid twin (or null), for the Shared pull');assert.ok(!('subject' in list[0]), 'who asked stays private');assert.equal((await t.get('/api/v1/glyphs/drafts?status=rejected')).status, 403);assert.equal((await t.get('/api/v1/glyphs/drafts?status=nope', { as: boss })).status, 422);
@@ -230,7 +230,7 @@ function createIconRoutes(ctx) {
@@ -230,7 +230,7 @@ function createIconRoutes(ctx) {
if (status !== 'approved' && !isAdmin(req)) return problem(res, req, 403, 'design.glyph_drafts_private', 'Only approved drafts are public.');
if (status !== 'approved' && !isAdmin(req)) return problem(res, req, 403, 'design.glyph_drafts_private', 'Only approved drafts are public.');
if (!['approved', 'draft', 'rejected'].includes(status)) return problem(res, req, 422, 'design.invalid', 'status is approved, draft or rejected.');
if (!['approved', 'draft', 'rejected'].includes(status)) return problem(res, req, 422, 'design.invalid', 'status is approved, draft or rejected.');
const rows = await drafts.list({ status, limit: 500 });
const rows = await drafts.list({ status, limit: 500 });
- res.set('Cache-Control', status === 'approved' ? 'public, max-age=300' : 'private, no-store').json({ drafts: rows.map((d) => ({ id: d.id, name: d.name, sentence: d.sentence, svg: d.svg, model: d.model, status: d.status, created_at: d.created_at, reviewed_at: d.reviewed_at })) });
+ res.set('Cache-Control', status === 'approved' ? 'public, max-age=300' : 'private, no-store').json({ drafts: rows.map((d) => ({ id: d.id, name: d.name, sentence: d.sentence, svg: d.svg, solid_svg: d.solid_svg || null, model: d.model, status: d.status, created_at: d.created_at, reviewed_at: d.reviewed_at })) });
});
});
return r;
return r;
}
}
@@ -219,6 +219,7 @@ const form = (fields) => ({ body: new URLSearchParams(fields).toString(), header
@@ -219,6 +219,7 @@ const form = (fields) => ({ body: new URLSearchParams(fields).toString(), header
assert.equal(list[0].name, 'hot-tub');
assert.equal(list[0].name, 'hot-tub');
assert.equal(list[0].status, 'approved');
assert.equal(list[0].status, 'approved');
assert.ok(clean(list[0].svg).ok, 'what is served passed the validator');
assert.ok(clean(list[0].svg).ok, 'what is served passed the validator');
+ assert.ok('solid_svg' in list[0], 'each draft carries its solid twin (or null), for the Shared pull');
assert.ok(!('subject' in list[0]), 'who asked stays private');
assert.ok(!('subject' in list[0]), 'who asked stays private');
assert.equal((await t.get('/api/v1/glyphs/drafts?status=rejected')).status, 403);
assert.equal((await t.get('/api/v1/glyphs/drafts?status=rejected')).status, 403);
assert.equal((await t.get('/api/v1/glyphs/drafts?status=nope', { as: boss })).status, 422);
assert.equal((await t.get('/api/v1/glyphs/drafts?status=nope', { as: boss })).status, 422);