Run database migrations when opening board. Not when updating WeKan.

Thanks to xet7 !
This commit is contained in:
Lauri Ojansivu 2025-10-11 19:23:47 +03:00
parent ea30612013
commit 2b5c56484a
20 changed files with 2508 additions and 118 deletions

View file

@ -1,5 +1,9 @@
template(name="board")
if isBoardReady.get
if isMigrating
+migrationProgress
else if isConverting
+boardConversionProgress
else if isBoardReady.get
if currentBoard
if onlyShowCurrentCard
+cardDetails(currentCard)

View file

@ -1,6 +1,8 @@
import { ReactiveCache } from '/imports/reactiveCache';
import { TAPi18n } from '/imports/i18n';
import dragscroll from '@wekanteam/dragscroll';
import { boardConverter } from '/imports/lib/boardConverter';
import { migrationManager } from '/imports/lib/migrationManager';
const subManager = new SubsManager();
const { calculateIndex } = Utils;
@ -9,6 +11,8 @@ const swimlaneWhileSortingHeight = 150;
BlazeComponent.extendComponent({
onCreated() {
this.isBoardReady = new ReactiveVar(false);
this.isConverting = new ReactiveVar(false);
this.isMigrating = new ReactiveVar(false);
// The pattern we use to manually handle data loading is described here:
// https://kadira.io/academy/meteor-routing-guide/content/subscriptions-and-data-management/using-subs-manager
@ -20,12 +24,49 @@ BlazeComponent.extendComponent({
const handle = subManager.subscribe('board', currentBoardId, false);
Tracker.nonreactive(() => {
Tracker.autorun(() => {
this.isBoardReady.set(handle.ready());
if (handle.ready()) {
// Check if board needs conversion
this.checkAndConvertBoard(currentBoardId);
} else {
this.isBoardReady.set(false);
}
});
});
});
},
async checkAndConvertBoard(boardId) {
try {
// First check if migrations need to be run
if (migrationManager.needsMigration()) {
this.isMigrating.set(true);
await migrationManager.startMigration();
this.isMigrating.set(false);
}
// Then check if board needs conversion
if (boardConverter.needsConversion(boardId)) {
this.isConverting.set(true);
const success = await boardConverter.convertBoard(boardId);
this.isConverting.set(false);
if (success) {
this.isBoardReady.set(true);
} else {
console.error('Board conversion failed');
this.isBoardReady.set(true); // Still show board even if conversion failed
}
} else {
this.isBoardReady.set(true);
}
} catch (error) {
console.error('Error during board conversion check:', error);
this.isConverting.set(false);
this.isMigrating.set(false);
this.isBoardReady.set(true); // Show board even if conversion check failed
}
},
onlyShowCurrentCard() {
return Utils.isMiniScreen() && Utils.getCurrentCardId(true);
},
@ -33,6 +74,14 @@ BlazeComponent.extendComponent({
goHome() {
FlowRouter.go('home');
},
isConverting() {
return this.isConverting.get();
},
isMigrating() {
return this.isMigrating.get();
},
}).register('board');
BlazeComponent.extendComponent({