From 7b6527752e48454f2a6825b7ffb346c1b4ba092c Mon Sep 17 00:00:00 2001 From: Jonas Lochmann Date: Mon, 25 May 2020 02:00:00 +0200 Subject: [PATCH] Fix missing columns in the purchase table --- .../migrations/20200601-fix-purchase-table.ts | 45 +++++++++++++++++++ src/database/purchase.ts | 8 ++-- 2 files changed, 49 insertions(+), 4 deletions(-) create mode 100644 src/database/migration/migrations/20200601-fix-purchase-table.ts diff --git a/src/database/migration/migrations/20200601-fix-purchase-table.ts b/src/database/migration/migrations/20200601-fix-purchase-table.ts new file mode 100644 index 0000000..65dc2ae --- /dev/null +++ b/src/database/migration/migrations/20200601-fix-purchase-table.ts @@ -0,0 +1,45 @@ +/* + * server component for the TimeLimit App + * Copyright (C) 2019 - 2020 Jonas Lochmann + * + * This program is free software: you can redistribute it and/or modify + * it under the terms of the GNU Affero General Public License as + * published by the Free Software Foundation, version 3 of the License. + * + * This program is distributed in the hope that it will be useful, + * but WITHOUT ANY WARRANTY; without even the implied warranty of + * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the + * GNU Affero General Public License for more details. + * + * You should have received a copy of the GNU Affero General Public License + * along with this program. If not, see . + */ + +import { QueryInterface, Sequelize, Transaction } from 'sequelize' +import { attributes as purchaseAttributes } from '../../purchase' + +export async function up (queryInterface: QueryInterface, sequelize: Sequelize) { + await sequelize.transaction({ + type: Transaction.TYPES.EXCLUSIVE + }, async (transaction) => { + await queryInterface.renameTable('Purchases', 'PurchasesOld', { transaction }) + await queryInterface.createTable('Purchases', purchaseAttributes, { transaction }) + + await sequelize.query(` + INSERT INTO Purchases (familyId, service, transactionId, type, loggedAt, previousFullVersionEndTime, newFullVersionEndTime) + SELECT familyId, service, transactionId, type, 0 AS loggedAt, 0 AS previousFullVersionEndTime, loggedAt AS newFullVersionEndTime + FROM PurchasesOld + `, { transaction }) + + await queryInterface.dropTable('PurchasesOld', { transaction }) + }) +} + +export async function down (queryInterface: QueryInterface, sequelize: Sequelize) { + await sequelize.transaction({ + type: Transaction.TYPES.EXCLUSIVE + }, async (transaction) => { + await queryInterface.removeColumn('Purchases', 'previousFullVersionEndTime', { transaction }) + await queryInterface.removeColumn('Purchases', 'newFullVersionEndTime', { transaction }) + }) +} diff --git a/src/database/purchase.ts b/src/database/purchase.ts index 8a10661..0b1f35b 100644 --- a/src/database/purchase.ts +++ b/src/database/purchase.ts @@ -1,6 +1,6 @@ /* * server component for the TimeLimit App - * Copyright (C) 2019 Jonas Lochmann + * Copyright (C) 2019 - 2020 Jonas Lochmann * * This program is free software: you can redistribute it and/or modify * it under the terms of the GNU Affero General Public License as @@ -45,9 +45,9 @@ export const attributes: SequelizeAttributes = { primaryKey: true }, type: createEnumColumn(['month', 'year']), - loggedAt: timestampColumn, - previousFullVersionEndTime: timestampColumn, - newFullVersionEndTime: timestampColumn + loggedAt: { ...timestampColumn }, + previousFullVersionEndTime: { ...timestampColumn }, + newFullVersionEndTime: { ...timestampColumn } } export const createPurchaseModel = (sequelize: Sequelize.Sequelize): PurchaseModelStatic => sequelize.define('Purchase', attributes) as PurchaseModelStatic