-- CreateEnum CREATE TYPE "SubscriptionStatus" AS ENUM ('TRIALING', 'ACTIVE', 'PAST_DUE', 'CANCEL_AT_PERIOD_END', 'CANCELED', 'EXPIRED'); -- CreateEnum CREATE TYPE "BillingInterval" AS ENUM ('MONTH', 'YEAR'); -- CreateTable CREATE TABLE "subscriptions" ( "id" TEXT NOT NULL, "user_id" TEXT NOT NULL, "status" "SubscriptionStatus" NOT NULL, "trial_ends_at" TIMESTAMP(3) NOT NULL, "stripe_customer_id" TEXT, "stripe_subscription_id" TEXT, "stripe_price_id" TEXT, "current_period_end" TIMESTAMP(3), "interval" "BillingInterval", "cancel_at_period_end" BOOLEAN NOT NULL DEFAULT false, "ended_at" TIMESTAMP(3), "created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updated_at" TIMESTAMP(3) NOT NULL, CONSTRAINT "subscriptions_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "billing_webhook_events" ( "id" TEXT NOT NULL, "type" TEXT NOT NULL, "received_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "processed_at" TIMESTAMP(3), "payload" JSONB NOT NULL, CONSTRAINT "billing_webhook_events_pkey" PRIMARY KEY ("id") ); -- CreateIndex CREATE UNIQUE INDEX "subscriptions_user_id_key" ON "subscriptions"("user_id"); -- CreateIndex CREATE UNIQUE INDEX "subscriptions_stripe_customer_id_key" ON "subscriptions"("stripe_customer_id"); -- CreateIndex CREATE UNIQUE INDEX "subscriptions_stripe_subscription_id_key" ON "subscriptions"("stripe_subscription_id"); -- CreateIndex CREATE INDEX "subscriptions_status_idx" ON "subscriptions"("status"); -- CreateIndex CREATE INDEX "billing_webhook_events_type_idx" ON "billing_webhook_events"("type"); -- AddForeignKey ALTER TABLE "subscriptions" ADD CONSTRAINT "subscriptions_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;