From 918c721bd1cb58e6f951d9f2c58cf41fd09306ff Mon Sep 17 00:00:00 2001 From: Fabien O'Carroll Date: Wed, 4 Nov 2020 11:06:57 +0000 Subject: [PATCH] Added recipient_filter column to emails table no-issue This column will allow us to store the canonical recipient filter on the email resource giving us a detailed log of which members an email was intended for --- .../3.38/03-add-recipient-filter-column.js | 25 +++++++++++++++++++ core/server/data/schema/schema.js | 7 ++++++ core/server/models/email.js | 1 + test/unit/data/schema/integrity_spec.js | 2 +- 4 files changed, 34 insertions(+), 1 deletion(-) create mode 100644 core/server/data/migrations/versions/3.38/03-add-recipient-filter-column.js diff --git a/core/server/data/migrations/versions/3.38/03-add-recipient-filter-column.js b/core/server/data/migrations/versions/3.38/03-add-recipient-filter-column.js new file mode 100644 index 0000000000..34ad1c72d4 --- /dev/null +++ b/core/server/data/migrations/versions/3.38/03-add-recipient-filter-column.js @@ -0,0 +1,25 @@ +const {createColumnMigration, addColumn, dropColumn} = require('../../../schema/commands'); + +module.exports = { + up: createColumnMigration({ + table: 'emails', + column: 'recipient_filter', + dbIsInCorrectState: hasColumn => !!hasColumn, + operation: addColumn, + operationVerb: 'Adding', + columnDefinition: { + type: 'string', + maxlength: 50, + nullable: false, + defaultTo: 'paid', + validations: {isIn: [['all', 'free', 'paid']]} + } + }), + down: createColumnMigration({ + table: 'emails', + column: 'recipient_filter', + dbIsInCorrectState: hasColumn => !hasColumn, + operation: dropColumn, + operationVerb: 'Removing' + }) +}; diff --git a/core/server/data/schema/schema.js b/core/server/data/schema/schema.js index fdfdd5a7ab..6ba5fc044e 100644 --- a/core/server/data/schema/schema.js +++ b/core/server/data/schema/schema.js @@ -453,6 +453,13 @@ module.exports = { defaultTo: 'pending', validations: {isIn: [['pending', 'submitting', 'submitted', 'failed']]} }, + recipient_filter: { + type: 'string', + maxlength: 50, + nullable: false, + defaultTo: 'paid', + validations: {isIn: [['all', 'free', 'paid']]} + }, error: {type: 'string', maxlength: 2000, nullable: true}, error_data: {type: 'text', maxlength: 1000000000, fieldtype: 'long', nullable: true}, meta: {type: 'text', maxlength: 65535, nullable: true}, diff --git a/core/server/models/email.js b/core/server/models/email.js index 9793a93301..0cc0e9c17d 100644 --- a/core/server/models/email.js +++ b/core/server/models/email.js @@ -8,6 +8,7 @@ const Email = ghostBookshelf.Model.extend({ return { uuid: uuid.v4(), status: 'pending', + recipient_filter: 'paid', stats: JSON.stringify({ delivered: 0, failed: 0, diff --git a/test/unit/data/schema/integrity_spec.js b/test/unit/data/schema/integrity_spec.js index 51fccd7e8d..1dcf446a14 100644 --- a/test/unit/data/schema/integrity_spec.js +++ b/test/unit/data/schema/integrity_spec.js @@ -32,7 +32,7 @@ const defaultSettings = require('../../../../core/server/data/schema/default-set */ describe('DB version integrity', function () { // Only these variables should need updating - const currentSchemaHash = '7d841714b01e6d880d4d8a739ab62bff'; + const currentSchemaHash = '875ecd7995d0dccdbc0ae64be8dfbca0'; const currentFixturesHash = 'd46d696c94d03e41a5903500547fea77'; const currentSettingsHash = 'c8daa2c9632bb75f9d60655de09ae3bd'; const currentRoutesHash = '3d180d52c663d173a6be791ef411ed01';