feat: make db migration on-demand instead of automatic

This commit is contained in:
thecodrr
2022-07-20 07:34:12 +05:00
parent 83b2d79e01
commit e06cf139f0
3 changed files with 12 additions and 16 deletions

View File

@@ -26,6 +26,7 @@ import NoteHistory from "../collections/note-history";
import MFAManager from "./mfa-manager"; import MFAManager from "./mfa-manager";
import EventManager from "../utils/event-manager"; import EventManager from "../utils/event-manager";
import Pricing from "./pricing"; import Pricing from "./pricing";
import { logger } from "../logger";
/** /**
* @type {EventSource} * @type {EventSource}
@@ -125,9 +126,11 @@ class Database {
await this.settings.init(); await this.settings.init();
await this.outbox.init(); await this.outbox.init();
await this.user.init(); await this.user.init();
await this.migrations.init(); await this.migrations.init();
await this.migrations.migrate();
if (this.migrations.required()) {
logger.warn("Database migration is required.");
}
} }
disconnectSSE() { disconnectSSE() {

View File

@@ -1,4 +1,4 @@
import { CURRENT_DATABASE_VERSION, EVENTS } from "../common"; import { CURRENT_DATABASE_VERSION } from "../common";
import Migrator from "../database/migrator"; import Migrator from "../database/migrator";
class Migrations { class Migrations {
@@ -18,14 +18,13 @@ class Migrations {
this._db.storage.write("v", this.dbVersion); this._db.storage.write("v", this.dbVersion);
} }
async migrate() { required() {
if (this.dbVersion >= CURRENT_DATABASE_VERSION || this._isMigrating) return; return this.dbVersion < CURRENT_DATABASE_VERSION;
}
async migrate() {
if (!this.required() || this._isMigrating) return;
this._isMigrating = true; this._isMigrating = true;
this._db.eventManager.publish(EVENTS.databaseMigrating, {
from: this.dbVersion,
to: CURRENT_DATABASE_VERSION,
});
await this._db.notes.init(); await this._db.notes.init();
const content = await this._db.content.all(); const content = await this._db.content.all();
@@ -64,11 +63,7 @@ class Migrations {
]; ];
await this._migrator.migrate(collections, (item) => item, this.dbVersion); await this._migrator.migrate(collections, (item) => item, this.dbVersion);
await this._db.storage.write("v", CURRENT_DATABASE_VERSION); await this._db.storage.write("v", CURRENT_DATABASE_VERSION);
this.dbVersion = CURRENT_DATABASE_VERSION;
setTimeout(() => {
this._db.eventManager.publish(EVENTS.databaseMigrated);
this.dbVersion = CURRENT_DATABASE_VERSION;
}, 5000);
} }
} }
export default Migrations; export default Migrations;

View File

@@ -51,8 +51,6 @@ export const EVENTS = {
databaseSyncRequested: "db:syncRequested", databaseSyncRequested: "db:syncRequested",
syncProgress: "sync:progress", syncProgress: "sync:progress",
syncCompleted: "sync:completed", syncCompleted: "sync:completed",
databaseMigrated: "db:migrated",
databaseMigrating: "db:migrating",
databaseUpdated: "db:updated", databaseUpdated: "db:updated",
databaseCollectionInitiated: "db:collectionInitiated", databaseCollectionInitiated: "db:collectionInitiated",
appRefreshRequested: "app:refreshRequested", appRefreshRequested: "app:refreshRequested",