first commit
This commit is contained in:
104
database/migrations/001_subscription_lifecycle.sql
Normal file
104
database/migrations/001_subscription_lifecycle.sql
Normal file
@@ -0,0 +1,104 @@
|
||||
BEGIN;
|
||||
|
||||
ALTER TABLE subscriptions
|
||||
ADD COLUMN IF NOT EXISTS activation_date text,
|
||||
ADD COLUMN IF NOT EXISTS first_payment_date text,
|
||||
ADD COLUMN IF NOT EXISTS end_date text,
|
||||
ADD COLUMN IF NOT EXISTS occurrence_count integer,
|
||||
ADD COLUMN IF NOT EXISTS custom_interval_days integer;
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
IF EXISTS (
|
||||
SELECT 1
|
||||
FROM information_schema.columns
|
||||
WHERE table_name = 'subscriptions' AND column_name = 'renewal_date'
|
||||
) THEN
|
||||
UPDATE subscriptions
|
||||
SET
|
||||
activation_date = COALESCE(activation_date, renewal_date),
|
||||
first_payment_date = COALESCE(first_payment_date, renewal_date),
|
||||
subscription_status = CASE
|
||||
WHEN subscription_status = 'disabled' THEN 'terminated'
|
||||
ELSE subscription_status
|
||||
END;
|
||||
ELSE
|
||||
UPDATE subscriptions
|
||||
SET subscription_status = 'terminated'
|
||||
WHERE subscription_status = 'disabled';
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
ALTER TABLE subscriptions
|
||||
ALTER COLUMN activation_date SET NOT NULL,
|
||||
ALTER COLUMN first_payment_date SET NOT NULL;
|
||||
|
||||
ALTER TABLE subscriptions
|
||||
DROP COLUMN IF EXISTS renewal_date,
|
||||
DROP COLUMN IF EXISTS auto_renew;
|
||||
|
||||
DROP INDEX IF EXISTS subscriptions_renewal_date_idx;
|
||||
CREATE INDEX IF NOT EXISTS subscriptions_first_payment_date_idx
|
||||
ON subscriptions(first_payment_date);
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM pg_constraint
|
||||
WHERE conname = 'subscriptions_occurrence_count_positive'
|
||||
) THEN
|
||||
ALTER TABLE subscriptions
|
||||
ADD CONSTRAINT subscriptions_occurrence_count_positive
|
||||
CHECK (occurrence_count > 0);
|
||||
END IF;
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM pg_constraint
|
||||
WHERE conname = 'subscriptions_custom_interval_days_positive'
|
||||
) THEN
|
||||
ALTER TABLE subscriptions
|
||||
ADD CONSTRAINT subscriptions_custom_interval_days_positive
|
||||
CHECK (custom_interval_days > 0);
|
||||
END IF;
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM pg_constraint
|
||||
WHERE conname = 'subscriptions_amount_positive'
|
||||
) THEN
|
||||
ALTER TABLE subscriptions
|
||||
ADD CONSTRAINT subscriptions_amount_positive CHECK (amount > 0);
|
||||
END IF;
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM pg_constraint
|
||||
WHERE conname = 'subscriptions_billing_cycle_valid'
|
||||
) THEN
|
||||
ALTER TABLE subscriptions
|
||||
ADD CONSTRAINT subscriptions_billing_cycle_valid
|
||||
CHECK (billing_cycle IN ('weekly', 'monthly', 'yearly', 'custom'));
|
||||
END IF;
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM pg_constraint
|
||||
WHERE conname = 'subscriptions_status_valid'
|
||||
) THEN
|
||||
ALTER TABLE subscriptions
|
||||
ADD CONSTRAINT subscriptions_status_valid
|
||||
CHECK (subscription_status IN ('active', 'suspended', 'terminated'));
|
||||
END IF;
|
||||
IF NOT EXISTS (
|
||||
SELECT 1
|
||||
FROM pg_constraint
|
||||
WHERE conname = 'subscriptions_dates_valid'
|
||||
) THEN
|
||||
ALTER TABLE subscriptions
|
||||
ADD CONSTRAINT subscriptions_dates_valid
|
||||
CHECK (
|
||||
activation_date <= first_payment_date
|
||||
AND (end_date IS NULL OR end_date >= first_payment_date)
|
||||
);
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
COMMIT;
|
||||
Reference in New Issue
Block a user