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:
@@ -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({
|
||||
|
||||
Reference in New Issue
Block a user