From 182e6ffe1067b0098f9818e39a499e89f251a0c2 Mon Sep 17 00:00:00 2001 From: Daniel Gasienica Date: Wed, 14 Mar 2018 11:46:22 -0400 Subject: [PATCH] Add version 17 migration --- js/modules/migrations/17/index.js | 39 +++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 js/modules/migrations/17/index.js diff --git a/js/modules/migrations/17/index.js b/js/modules/migrations/17/index.js new file mode 100644 index 000000000..618c95156 --- /dev/null +++ b/js/modules/migrations/17/index.js @@ -0,0 +1,39 @@ +const idb = require('idb'); +const Message = require('../../types/message'); + + +exports.run = async (transaction) => { + const db = idb.upgradeDBFromTransaction(transaction); + const tx = db.transaction; + const messagesStore = tx.objectStore('messages'); + + console.log('Initialize messages schema version'); + await exports._initializeMessageSchemaVersion(messagesStore); + + console.log('Create index from attachment schema version to attachment'); + messagesStore.createIndex('schemaVersion', 'schemaVersion', { unique: false }); + + await db.transaction.complete; +}; + +exports._initializeMessageSchemaVersion = messagesStore => + new Promise((resolve, reject) => { + messagesStore.openCursor().then(async function cursorIterate(cursor) { + const hasMoreResults = Boolean(cursor); + if (!hasMoreResults) { + return resolve(); + } + + const message = cursor.value; + console.log('Initialize schema version for message:', message.id); + + const messageWithInitializedSchemaVersion = Message.initializeSchemaVersion(message); + try { + await messagesStore.put(messageWithInitializedSchemaVersion, message.id); + } catch (error) { + console.log('Failed to put message with initialized schema version:', message.id); + } + + cursor.continue().then(cursorIterate); + }).catch(reject); + });