From df74ad3884c414284c7519ed80d87ca9b486bc8c Mon Sep 17 00:00:00 2001 From: Chris Molozian Date: Fri, 16 Apr 2021 12:42:15 +0100 Subject: [PATCH] Allow user_id to be NULL in purchase but maintain referential integrity. --- migrate/migrate.go | 1 + migrate/sql/20210416090601-purchase.sql | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/migrate/migrate.go b/migrate/migrate.go index 8f523f922..85c669616 100644 --- a/migrate/migrate.go +++ b/migrate/migrate.go @@ -63,6 +63,7 @@ type migrationService struct { func StartupCheck(logger *zap.Logger, db *sql.DB) { migrate.SetTable(migrationTable) + migrate.SetIgnoreUnknown(true) ms := &migrate.AssetMigrationSource{ Asset: func(path string) ([]byte, error) { diff --git a/migrate/sql/20210416090601-purchase.sql b/migrate/sql/20210416090601-purchase.sql index 373baa47a..46b4c2450 100644 --- a/migrate/sql/20210416090601-purchase.sql +++ b/migrate/sql/20210416090601-purchase.sql @@ -19,6 +19,7 @@ DROP TABLE IF EXISTS purchase_receipt; CREATE TABLE IF NOT EXISTS purchase ( PRIMARY KEY (transaction_id), + FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE SET NULL, create_time TIMESTAMPTZ NOT NULL DEFAULT now(), environment SMALLINT NOT NULL DEFAULT 0, -- Unknown(0), Sandbox(1), Production(2) @@ -28,7 +29,7 @@ CREATE TABLE IF NOT EXISTS purchase ( store SMALLINT NOT NULL DEFAULT 0, -- AppleAppStore(0), GooglePlay(1), Huawei(2) transaction_id VARCHAR(512) NOT NULL CHECK (length(transaction_id) > 0), update_time TIMESTAMPTZ NOT NULL DEFAULT now(), - user_id UUID NOT NULL + user_id UUID DEFAULT NULL ); CREATE INDEX IF NOT EXISTS purchase_user_id_purchase_time_transaction_id_idx ON purchase (user_id, purchase_time DESC, transaction_id); @@ -38,7 +39,6 @@ DROP TABLE IF EXISTS purchase; CREATE TABLE IF NOT EXISTS purchase_receipt ( PRIMARY KEY (receipt), - FOREIGN KEY (user_id) REFERENCES users (id) ON DELETE NO ACTION, create_time TIMESTAMPTZ NOT NULL DEFAULT now(), product_id VARCHAR(512) NOT NULL, -- GitLab