From 4311e5ed84689329145766a9a41ee8b0aad71656 Mon Sep 17 00:00:00 2001 From: Jordan Wright Date: Mon, 18 Apr 2016 20:40:59 -0500 Subject: [PATCH] Added migration file --- .../20160414222845_0.2_campaign_flows.sql | 96 +++++++++++++++++++ 1 file changed, 96 insertions(+) create mode 100644 db/migrations/20160414222845_0.2_campaign_flows.sql diff --git a/db/migrations/20160414222845_0.2_campaign_flows.sql b/db/migrations/20160414222845_0.2_campaign_flows.sql new file mode 100644 index 00000000..645ab322 --- /dev/null +++ b/db/migrations/20160414222845_0.2_campaign_flows.sql @@ -0,0 +1,96 @@ + +-- +goose Up +-- SQL in section 'Up' is executed when this migration is applied +ALTER TABLE campaigns RENAME TO campaigns_old; +/* +The new campaigns table will rely on a "flows" table that is basically a list of tasks to accomplish. + +This will include sending emails, hosting landing pages, or possibly taking other action as needed, +including running scripts, sending HTTP requests, etc. +*/ +CREATE TABLE campaigns ("id" integer primary key autoincrement, "user_id" bigint, "name" varchar(255) NOT NULL, "created_date" datetime, "completed_date" datetime, "flow_id" bigint, "status" varchar(255)); + +INSERT INTO campaigns +( + id, + user_id, + name, + created_date, + completed_date, + status +) +SELECT + campaigns_old.id, + campaigns_old.user_id, + campaigns_old.name, + campaigns_old.created_date, + campaigns_old.completed_date, + campaigns_old.status +FROM campaigns_old; + +/* Create our flows table */ + +CREATE TABLE "flows" ("id" integer primary key autoincrement,"user_id" bigint,"previous_id" bigint,"next_id" bigint,"campaign_id" bigint, "metadata" blob,"task" varchar(255)); + +/* Setup our email flows */ + +INSERT INTO flows ( + user_id, + campaign_id, + task, + metadata +) +SELECT + campaigns_old.user_id, + campaigns_old.id, + "SEND_EMAIL", + '{' || + '"smtp_id":' || campaigns_old.smtp_id || ',' || + '"template_id":' || campaigns_old.template_id || + '}' +FROM campaigns_old; + +/* Setup our landing page flows */ + +INSERT INTO flows ( + user_id, + campaign_id, + task, + metadata, + previous_id +) +SELECT + campaigns_old.user_id, + campaigns_old.id as campaign_id, + "LANDING_PAGE", + '{' || + '"page_id" : ' || campaigns_old.page_id || ',' || + '"url" : "' || campaigns_old.url || '"' || + '}', + flows.id as flow_id +FROM campaigns_old, flows +WHERE flows.id IN ( + SELECT id FROM flows + WHERE campaign_id=campaigns_old.id + AND task="SEND_EMAIL" + ); + +/* +Finally, we need to update our email flows to point to the landing page +flows. +*/ + +UPDATE flows +SET + next_id = ( + SELECT f2.id + FROM flows AS f2 + WHERE f2.previous_id=flows.id + AND f2.campaign_id = flows.campaign_id + AND f2.task = "LANDING_PAGE" + ) + WHERE task = "SEND_EMAIL" + +-- +goose Down +-- SQL section 'Down' is executed when this migration is rolled back +