Add backend scene converter for auto-migrating Fabric v1 to v2 format

When a board is loaded via GET /api/boards/:id, if the canvas_state
lacks a v2 marker, it is converted in-place and persisted back to DB
so subsequent loads skip conversion.
This commit is contained in:
Hiren Kangad
2026-03-09 23:25:39 +05:30
parent edcac21983
commit c8743c9a56
2 changed files with 105 additions and 0 deletions
+20
View File
@@ -98,6 +98,26 @@ router.get('/:boardId', (req, res) => {
if (!result) return;
const { board, collection } = result;
// Auto-convert Fabric v1 → v2 on first load
if (board.canvas_state) {
try {
const parsed = typeof board.canvas_state === 'string'
? JSON.parse(board.canvas_state)
: board.canvas_state;
if (!parsed.v || parsed.v < 2) {
const { convertFabricToV2 } = require('../services/scene-converter');
const v2 = convertFabricToV2(parsed);
const v2json = JSON.stringify(v2);
saveBoardCanvas(board.id, v2json, null);
board.canvas_state = v2json;
}
} catch (e) {
// Don't block board load on conversion failure
console.error('[boards] Scene conversion failed:', e);
}
}
const images = getBoardImages(board.id);
return res.json({