diff --git a/package.json b/package.json index 055b6cbb..d4e5b9c6 100644 --- a/package.json +++ b/package.json @@ -8,8 +8,9 @@ "test": "grunt", "start": "node index.js", "sqlinit": "node setup/sql/init.js", - "sqldump": "node setup/sql/dump.js | sed -e '/^--.*$/d' > setup/sql/mailtrain.sql", - "sqldrop": "node setup/sql/drop.js" + "sqldump": "node setup/sql/dump.js | sed -e '/^\\/\\*.*\\*\\/;$/d' > setup/sql/mailtrain.sql", + "sqldrop": "node setup/sql/drop.js", + "sqlgen": "npm run sqldrop && DB_FROM_START=Y npm run sqlinit && npm run sqldump" }, "repository": { "type": "git", diff --git a/setup/sql/drop.js b/setup/sql/drop.js index 6caa5db9..ba0291d2 100644 --- a/setup/sql/drop.js +++ b/setup/sql/drop.js @@ -1,5 +1,10 @@ 'use strict'; +if (process.env.NODE_ENV === 'production') { + console.log('This script does not run in production'); // eslint-disable-line no-console + process.exit(1); +} + let config = require('config'); let spawn = require('child_process').spawn; let log = require('npmlog'); @@ -29,15 +34,11 @@ function createDump(callback) { }); } -if (process.env.CONFIRM === 'Y') { - createDump(err => { - if (err) { - log.error('sqldrop', err); - process.exit(1); - } - log.info('sqldrop', 'Command completed, all tables dropped from "%s"', config.mysql.database); - process.exit(0); - }); -} else { - log.error('sqldrop', 'Run command as "CONFIRM=Y npm run sqldrop"'); -} +createDump(err => { + if (err) { + log.error('sqldrop', err); + process.exit(1); + } + log.info('sqldrop', 'Command completed, all tables dropped from "%s"', config.mysql.database); + process.exit(0); +}); diff --git a/setup/sql/dump.js b/setup/sql/dump.js index 39988401..4cbb6bab 100644 --- a/setup/sql/dump.js +++ b/setup/sql/dump.js @@ -1,5 +1,10 @@ 'use strict'; +if (process.env.NODE_ENV === 'production') { + console.log('This script does not run in production'); // eslint-disable-line no-console + process.exit(1); +} + let config = require('config'); let spawn = require('child_process').spawn; let log = require('npmlog'); @@ -7,7 +12,9 @@ let log = require('npmlog'); log.level = 'verbose'; function createDump(callback) { - let cmd = spawn('mysqldump', ['-h', config.mysql.host || 'localhost', '-P', config.mysql.port || 3306, '-u', config.mysql.user, '-p' + config.mysql.password, '--opt', config.mysql.database]); + let cmd = spawn('mysqldump', ['-h', config.mysql.host || 'localhost', '-P', config.mysql.port || 3306, '-u', config.mysql.user, '-p' + config.mysql.password, '--skip-opt', '--quick', '--compact', '--complete-insert', '--create-options', '--tz-utc', '--no-set-names', '--skip-set-charset', '--skip-comments', config.mysql.database]); + + process.stdout.write('SET UNIQUE_CHECKS=0;\nSET FOREIGN_KEY_CHECKS=0;\n\n'); cmd.stdout.pipe(process.stdout); cmd.stderr.pipe(process.stderr); @@ -16,6 +23,9 @@ function createDump(callback) { if (code) { return callback(new Error('mysqldump command exited with code ' + code)); } + + process.stdout.write('\nSET UNIQUE_CHECKS=1;\nSET FOREIGN_KEY_CHECKS=1;\n'); + return callback(null, true); }); } diff --git a/setup/sql/init.js b/setup/sql/init.js index 33700f3c..c3a638e3 100644 --- a/setup/sql/init.js +++ b/setup/sql/init.js @@ -1,5 +1,10 @@ 'use strict'; +if (process.env.NODE_ENV === 'production') { + console.log('This script does not run in production'); // eslint-disable-line no-console + process.exit(1); +} + let dbcheck = require('../../lib/dbcheck'); let log = require('npmlog'); diff --git a/setup/sql/mailtrain.sql b/setup/sql/mailtrain.sql index c49a62db..a3d4e5de 100644 --- a/setup/sql/mailtrain.sql +++ b/setup/sql/mailtrain.sql @@ -16,7 +16,6 @@ CREATE TABLE `campaign` ( KEY `created` (`created`), KEY `response_id` (`response_id`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - CREATE TABLE `campaign_tracker` ( `list` int(11) unsigned NOT NULL, `subscriber` int(11) unsigned NOT NULL, @@ -26,21 +25,23 @@ CREATE TABLE `campaign_tracker` ( `count` int(11) unsigned NOT NULL DEFAULT '1', PRIMARY KEY (`list`,`subscriber`,`link`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - CREATE TABLE `campaigns` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `cid` varchar(255) CHARACTER SET ascii NOT NULL, + `type` tinyint(4) unsigned NOT NULL DEFAULT '1', `name` varchar(255) NOT NULL DEFAULT '', `description` text, `list` int(11) unsigned NOT NULL, `segment` int(11) unsigned DEFAULT NULL, `template` int(11) unsigned NOT NULL, + `source_url` varchar(255) CHARACTER SET ascii DEFAULT NULL, `from` varchar(255) DEFAULT '', `address` varchar(255) DEFAULT '', `subject` varchar(255) DEFAULT '', `html` text, `text` text, `status` tinyint(4) unsigned NOT NULL DEFAULT '1', + `scheduled` timestamp NULL DEFAULT NULL, `status_change` timestamp NULL DEFAULT NULL, `delivered` int(11) unsigned NOT NULL DEFAULT '0', `opened` int(11) unsigned NOT NULL DEFAULT '0', @@ -52,9 +53,10 @@ CREATE TABLE `campaigns` ( PRIMARY KEY (`id`), UNIQUE KEY `cid` (`cid`), KEY `name` (`name`(191)), - KEY `status` (`status`) + KEY `status` (`status`), + KEY `schedule_index` (`scheduled`), + KEY `type_index` (`type`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - CREATE TABLE `confirmations` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `cid` varchar(255) CHARACTER SET ascii NOT NULL, @@ -67,7 +69,6 @@ CREATE TABLE `confirmations` ( KEY `list` (`list`), CONSTRAINT `confirmations_ibfk_1` FOREIGN KEY (`list`) REFERENCES `lists` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - CREATE TABLE `custom_fields` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `list` int(11) unsigned NOT NULL, @@ -84,7 +85,6 @@ CREATE TABLE `custom_fields` ( KEY `list_2` (`list`), CONSTRAINT `custom_fields_ibfk_1` FOREIGN KEY (`list`) REFERENCES `lists` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - CREATE TABLE `import_failed` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `import` int(11) unsigned NOT NULL, @@ -95,7 +95,6 @@ CREATE TABLE `import_failed` ( KEY `import` (`import`), CONSTRAINT `import_failed_ibfk_1` FOREIGN KEY (`import`) REFERENCES `importer` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - CREATE TABLE `importer` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `list` int(11) unsigned NOT NULL, @@ -106,6 +105,8 @@ CREATE TABLE `importer` ( `status` tinyint(4) unsigned NOT NULL DEFAULT '0', `error` varchar(255) DEFAULT NULL, `processed` int(11) unsigned NOT NULL DEFAULT '0', + `new` int(11) unsigned NOT NULL DEFAULT '0', + `failed` int(11) unsigned NOT NULL DEFAULT '0', `created` timestamp NOT NULL DEFAULT CURRENT_TIMESTAMP, `mapping` text NOT NULL, `finished` timestamp NULL DEFAULT NULL, @@ -113,7 +114,6 @@ CREATE TABLE `importer` ( KEY `list` (`list`), CONSTRAINT `importer_ibfk_1` FOREIGN KEY (`list`) REFERENCES `lists` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - CREATE TABLE `links` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `cid` varchar(255) CHARACTER SET ascii NOT NULL DEFAULT '', @@ -126,7 +126,6 @@ CREATE TABLE `links` ( KEY `campaign` (`campaign`), CONSTRAINT `links_ibfk_1` FOREIGN KEY (`campaign`) REFERENCES `campaigns` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - CREATE TABLE `lists` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `cid` varchar(255) CHARACTER SET ascii NOT NULL, @@ -138,7 +137,6 @@ CREATE TABLE `lists` ( UNIQUE KEY `cid` (`cid`), KEY `name` (`name`(191)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - CREATE TABLE `segment_rules` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `segment` int(11) unsigned NOT NULL, @@ -148,7 +146,6 @@ CREATE TABLE `segment_rules` ( KEY `segment` (`segment`), CONSTRAINT `segment_rules_ibfk_1` FOREIGN KEY (`segment`) REFERENCES `segments` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - CREATE TABLE `segments` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `list` int(11) unsigned NOT NULL, @@ -157,28 +154,40 @@ CREATE TABLE `segments` ( `created` timestamp NULL DEFAULT CURRENT_TIMESTAMP, PRIMARY KEY (`id`), KEY `list` (`list`), - KEY `name` (`name`), + KEY `name` (`name`(191)), CONSTRAINT `segments_ibfk_1` FOREIGN KEY (`list`) REFERENCES `lists` (`id`) ON DELETE CASCADE ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - CREATE TABLE `settings` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `key` varchar(255) CHARACTER SET ascii NOT NULL DEFAULT '', `value` text NOT NULL, PRIMARY KEY (`id`), UNIQUE KEY `key` (`key`) -) ENGINE=InnoDB AUTO_INCREMENT=18 DEFAULT CHARSET=utf8mb4; - -LOCK TABLES `settings` WRITE; -INSERT INTO `settings` VALUES (1,'smtp_hostname','localhost'),(2,'smtp_port','465'),(3,'smtp_encryption','TLS'),(4,'smtp_user','username'),(5,'smtp_pass','password'),(6,'service_url','http://localhost:3000/'),(7,'admin_email','admin@example.com'),(8,'smtp_max_connections','5'),(9,'smtp_max_messages','100'),(10,'smtp_log',''),(11,'default_sender','My Awesome Company'),(12,'default_postaddress','1234 Main Street'),(13,'default_from','My Awesome Company'),(14,'default_address','admin@example.com'),(15,'default_subject','Test message'),(16,'default_homepage','http://localhost:3000/'),(17,'db_schema_version','1'); -UNLOCK TABLES; - +) ENGINE=InnoDB AUTO_INCREMENT=24 DEFAULT CHARSET=utf8mb4; +INSERT INTO `settings` (`id`, `key`, `value`) VALUES (1,'smtp_hostname','localhost'); +INSERT INTO `settings` (`id`, `key`, `value`) VALUES (2,'smtp_port','465'); +INSERT INTO `settings` (`id`, `key`, `value`) VALUES (3,'smtp_encryption','TLS'); +INSERT INTO `settings` (`id`, `key`, `value`) VALUES (4,'smtp_user','username'); +INSERT INTO `settings` (`id`, `key`, `value`) VALUES (5,'smtp_pass','password'); +INSERT INTO `settings` (`id`, `key`, `value`) VALUES (6,'service_url','http://localhost:3000/'); +INSERT INTO `settings` (`id`, `key`, `value`) VALUES (7,'admin_email','admin@example.com'); +INSERT INTO `settings` (`id`, `key`, `value`) VALUES (8,'smtp_max_connections','5'); +INSERT INTO `settings` (`id`, `key`, `value`) VALUES (9,'smtp_max_messages','100'); +INSERT INTO `settings` (`id`, `key`, `value`) VALUES (10,'smtp_log',''); +INSERT INTO `settings` (`id`, `key`, `value`) VALUES (11,'default_sender','My Awesome Company'); +INSERT INTO `settings` (`id`, `key`, `value`) VALUES (12,'default_postaddress','1234 Main Street'); +INSERT INTO `settings` (`id`, `key`, `value`) VALUES (13,'default_from','My Awesome Company'); +INSERT INTO `settings` (`id`, `key`, `value`) VALUES (14,'default_address','admin@example.com'); +INSERT INTO `settings` (`id`, `key`, `value`) VALUES (15,'default_subject','Test message'); +INSERT INTO `settings` (`id`, `key`, `value`) VALUES (16,'default_homepage','http://localhost:3000/'); +INSERT INTO `settings` (`id`, `key`, `value`) VALUES (17,'db_schema_version','7'); CREATE TABLE `subscription` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `cid` varchar(255) CHARACTER SET ascii NOT NULL, `email` varchar(255) CHARACTER SET utf8 NOT NULL DEFAULT '', `opt_in_ip` varchar(100) DEFAULT NULL, `opt_in_country` varchar(2) DEFAULT NULL, + `tz` varchar(100) CHARACTER SET ascii DEFAULT NULL, `imported` int(11) unsigned DEFAULT NULL, `status` tinyint(4) unsigned NOT NULL DEFAULT '1', `status_change` timestamp NULL DEFAULT NULL, @@ -192,9 +201,9 @@ CREATE TABLE `subscription` ( UNIQUE KEY `cid` (`cid`), KEY `status` (`status`), KEY `first_name` (`first_name`(191)), - KEY `last_name` (`last_name`(191)) + KEY `last_name` (`last_name`(191)), + KEY `subscriber_tz` (`tz`) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - CREATE TABLE `templates` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `name` varchar(255) NOT NULL DEFAULT '', @@ -205,7 +214,11 @@ CREATE TABLE `templates` ( PRIMARY KEY (`id`), KEY `name` (`name`(191)) ) ENGINE=InnoDB DEFAULT CHARSET=utf8mb4; - +CREATE TABLE `tzoffset` ( + `tz` varchar(100) NOT NULL DEFAULT '', + `offset` int(11) NOT NULL DEFAULT '0', + PRIMARY KEY (`tz`) +) ENGINE=InnoDB DEFAULT CHARSET=ascii; CREATE TABLE `users` ( `id` int(11) unsigned NOT NULL AUTO_INCREMENT, `username` varchar(255) NOT NULL DEFAULT '', @@ -220,10 +233,7 @@ CREATE TABLE `users` ( KEY `reset` (`reset_token`), KEY `check_reset` (`username`(191),`reset_token`,`reset_expire`) ) ENGINE=InnoDB AUTO_INCREMENT=2 DEFAULT CHARSET=utf8mb4; - -LOCK TABLES `users` WRITE; -INSERT INTO `users` VALUES (1,'admin','$2a$10$mzKU71G62evnGB2PvQA4k..Wf9jASk.c7a8zRMHh6qQVjYJ2r/g/K','admin@example.com',NULL,NULL,NOW()); -UNLOCK TABLES; +INSERT INTO `users` (`id`, `username`, `password`, `email`, `reset_token`, `reset_expire`, `created`) VALUES (1,'admin','$2a$10$mzKU71G62evnGB2PvQA4k..Wf9jASk.c7a8zRMHh6qQVjYJ2r/g/K','admin@example.com',NULL,NULL,'2016-05-01 17:15:46'); SET UNIQUE_CHECKS=1; SET FOREIGN_KEY_CHECKS=1;