114 lines
3.9 KiB
PL/PgSQL
114 lines
3.9 KiB
PL/PgSQL
-- ============================================
|
|
-- Migration: V20260120_002 - DOWN (Rollback)
|
|
-- Description: Revert billing.subscriptions structure
|
|
-- Changes (reversed):
|
|
-- - Remove stripe_subscription_id, stripe_customer_id columns
|
|
-- - Remove interval column
|
|
-- - Remove trial_start, cancel_at, cancel_reason columns
|
|
-- - Remove price_amount, currency columns
|
|
-- - Rename canceled_at -> cancelled_at
|
|
-- - Revert billing.subscription_status enum: 'trialing' -> 'trial'
|
|
-- ============================================
|
|
|
|
-- DOWN Migration (Rollback)
|
|
BEGIN;
|
|
|
|
-- ============================================
|
|
-- 1. Rename canceled_at -> cancelled_at (revert to British)
|
|
-- ============================================
|
|
|
|
DO $$
|
|
BEGIN
|
|
IF EXISTS (
|
|
SELECT 1 FROM information_schema.columns
|
|
WHERE table_schema = 'billing' AND table_name = 'subscriptions' AND column_name = 'canceled_at'
|
|
) THEN
|
|
ALTER TABLE billing.subscriptions RENAME COLUMN canceled_at TO cancelled_at;
|
|
RAISE NOTICE 'Renamed canceled_at back to cancelled_at';
|
|
END IF;
|
|
END $$;
|
|
|
|
-- ============================================
|
|
-- 2. Remove pricing columns
|
|
-- ============================================
|
|
|
|
ALTER TABLE billing.subscriptions DROP COLUMN IF EXISTS currency;
|
|
ALTER TABLE billing.subscriptions DROP COLUMN IF EXISTS price_amount;
|
|
|
|
-- ============================================
|
|
-- 3. Remove trial and cancellation columns
|
|
-- ============================================
|
|
|
|
ALTER TABLE billing.subscriptions DROP COLUMN IF EXISTS cancel_reason;
|
|
ALTER TABLE billing.subscriptions DROP COLUMN IF EXISTS cancel_at;
|
|
ALTER TABLE billing.subscriptions DROP COLUMN IF EXISTS trial_start;
|
|
|
|
-- ============================================
|
|
-- 4. Remove interval column
|
|
-- ============================================
|
|
|
|
ALTER TABLE billing.subscriptions DROP COLUMN IF EXISTS "interval";
|
|
|
|
-- ============================================
|
|
-- 5. Remove Stripe columns
|
|
-- ============================================
|
|
|
|
DROP INDEX IF EXISTS billing.idx_subscriptions_stripe;
|
|
ALTER TABLE billing.subscriptions DROP COLUMN IF EXISTS stripe_customer_id;
|
|
ALTER TABLE billing.subscriptions DROP COLUMN IF EXISTS stripe_subscription_id;
|
|
|
|
-- ============================================
|
|
-- 6. Revert subscription_status enum (trialing -> trial)
|
|
-- ============================================
|
|
|
|
DO $$
|
|
DECLARE
|
|
has_trialing_value BOOLEAN;
|
|
BEGIN
|
|
-- Check if 'trialing' exists in the enum (needs rollback)
|
|
SELECT EXISTS (
|
|
SELECT 1
|
|
FROM pg_enum e
|
|
JOIN pg_type t ON e.enumtypid = t.oid
|
|
JOIN pg_namespace n ON t.typnamespace = n.oid
|
|
WHERE n.nspname = 'billing'
|
|
AND t.typname = 'subscription_status'
|
|
AND e.enumlabel = 'trialing'
|
|
) INTO has_trialing_value;
|
|
|
|
IF has_trialing_value THEN
|
|
-- Create old enum type with 'trial'
|
|
CREATE TYPE billing.subscription_status_old AS ENUM ('trial', 'active', 'past_due', 'cancelled', 'expired');
|
|
|
|
-- Convert column to text
|
|
ALTER TABLE billing.subscriptions
|
|
ALTER COLUMN status TYPE VARCHAR(50) USING status::VARCHAR(50);
|
|
|
|
-- Revert 'trialing' to 'trial'
|
|
UPDATE billing.subscriptions
|
|
SET status = 'trial'
|
|
WHERE status = 'trialing';
|
|
|
|
-- Drop current type
|
|
DROP TYPE IF EXISTS billing.subscription_status;
|
|
|
|
-- Rename old type back
|
|
ALTER TYPE billing.subscription_status_old RENAME TO subscription_status;
|
|
|
|
-- Convert column back to enum
|
|
ALTER TABLE billing.subscriptions
|
|
ALTER COLUMN status TYPE billing.subscription_status
|
|
USING status::billing.subscription_status;
|
|
|
|
-- Restore default
|
|
ALTER TABLE billing.subscriptions
|
|
ALTER COLUMN status SET DEFAULT 'trial'::billing.subscription_status;
|
|
|
|
RAISE NOTICE 'Reverted subscription_status enum: trialing -> trial';
|
|
END IF;
|
|
END $$;
|
|
|
|
RAISE NOTICE 'Rollback of V20260120_002 completed';
|
|
|
|
COMMIT;
|