update subscription algorithm
This commit is contained in:
@@ -0,0 +1,21 @@
|
||||
CREATE TABLE "pricing_configs" (
|
||||
"id" TEXT NOT NULL,
|
||||
"plan" TEXT NOT NULL,
|
||||
"billingPeriod" TEXT NOT NULL,
|
||||
"amount" INTEGER NOT NULL,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
"updatedBy" TEXT,
|
||||
|
||||
CONSTRAINT "pricing_configs_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX "pricing_configs_plan_billingPeriod_key" ON "pricing_configs"("plan", "billingPeriod");
|
||||
|
||||
-- Seed default prices (amounts in centimes MAD)
|
||||
INSERT INTO "pricing_configs" ("id", "plan", "billingPeriod", "amount", "updatedAt") VALUES
|
||||
('prc_starter_monthly', 'STARTER', 'MONTHLY', 2990, NOW()),
|
||||
('prc_starter_annual', 'STARTER', 'ANNUAL', 29900, NOW()),
|
||||
('prc_growth_monthly', 'GROWTH', 'MONTHLY', 3990, NOW()),
|
||||
('prc_growth_annual', 'GROWTH', 'ANNUAL', 39900, NOW()),
|
||||
('prc_pro_monthly', 'PRO', 'MONTHLY', 99900, NOW()),
|
||||
('prc_pro_annual', 'PRO', 'ANNUAL', 999000, NOW());
|
||||
+66
@@ -0,0 +1,66 @@
|
||||
-- Add new SubscriptionStatus enum values
|
||||
ALTER TYPE "SubscriptionStatus" ADD VALUE IF NOT EXISTS 'PAYMENT_PENDING';
|
||||
ALTER TYPE "SubscriptionStatus" ADD VALUE IF NOT EXISTS 'SUSPENDED';
|
||||
ALTER TYPE "SubscriptionStatus" ADD VALUE IF NOT EXISTS 'EXPIRED';
|
||||
ALTER TYPE "SubscriptionStatus" ADD VALUE IF NOT EXISTS 'PAUSED';
|
||||
|
||||
-- Add new InvoiceStatus enum value
|
||||
ALTER TYPE "InvoiceStatus" ADD VALUE IF NOT EXISTS 'VOIDED';
|
||||
|
||||
-- Extend subscriptions table (camelCase to match Prisma default)
|
||||
ALTER TABLE "subscriptions"
|
||||
ADD COLUMN IF NOT EXISTS "trialUsed" BOOLEAN NOT NULL DEFAULT false,
|
||||
ADD COLUMN IF NOT EXISTS "paymentPendingSince" TIMESTAMP(3),
|
||||
ADD COLUMN IF NOT EXISTS "paymentDueAt" TIMESTAMP(3),
|
||||
ADD COLUMN IF NOT EXISTS "pastDueSince" TIMESTAMP(3),
|
||||
ADD COLUMN IF NOT EXISTS "suspendedAt" TIMESTAMP(3),
|
||||
ADD COLUMN IF NOT EXISTS "endedAt" TIMESTAMP(3),
|
||||
ADD COLUMN IF NOT EXISTS "retryCount" INTEGER NOT NULL DEFAULT 0,
|
||||
ADD COLUMN IF NOT EXISTS "maxRetryCount" INTEGER NOT NULL DEFAULT 5;
|
||||
|
||||
-- Extend subscription_invoices table
|
||||
ALTER TABLE "subscription_invoices"
|
||||
ADD COLUMN IF NOT EXISTS "providerInvoiceId" TEXT,
|
||||
ADD COLUMN IF NOT EXISTS "dueAt" TIMESTAMP(3),
|
||||
ADD COLUMN IF NOT EXISTS "failedAt" TIMESTAMP(3),
|
||||
ADD COLUMN IF NOT EXISTS "voidedAt" TIMESTAMP(3);
|
||||
|
||||
-- Create subscription_events table
|
||||
CREATE TABLE IF NOT EXISTS "subscription_events" (
|
||||
"id" TEXT NOT NULL,
|
||||
"subscriptionId" TEXT NOT NULL,
|
||||
"companyId" TEXT NOT NULL,
|
||||
"eventType" TEXT NOT NULL,
|
||||
"source" TEXT NOT NULL DEFAULT 'system',
|
||||
"payload" JSONB NOT NULL DEFAULT '{}',
|
||||
"occurredAt" TIMESTAMP(3) NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT "subscription_events_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS "subscription_events_subscriptionId_idx" ON "subscription_events"("subscriptionId");
|
||||
CREATE INDEX IF NOT EXISTS "subscription_events_companyId_idx" ON "subscription_events"("companyId");
|
||||
|
||||
ALTER TABLE "subscription_events"
|
||||
ADD CONSTRAINT "subscription_events_subscriptionId_fkey"
|
||||
FOREIGN KEY ("subscriptionId") REFERENCES "subscriptions"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- Create payment_attempts table
|
||||
CREATE TABLE IF NOT EXISTS "payment_attempts" (
|
||||
"id" TEXT NOT NULL,
|
||||
"invoiceId" TEXT NOT NULL,
|
||||
"subscriptionId" TEXT NOT NULL,
|
||||
"providerPaymentId" TEXT,
|
||||
"status" TEXT NOT NULL,
|
||||
"failureCode" TEXT,
|
||||
"failureMessage" TEXT,
|
||||
"attemptedAt" TIMESTAMP(3) NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT "payment_attempts_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS "payment_attempts_invoiceId_idx" ON "payment_attempts"("invoiceId");
|
||||
|
||||
ALTER TABLE "payment_attempts"
|
||||
ADD CONSTRAINT "payment_attempts_invoiceId_fkey"
|
||||
FOREIGN KEY ("invoiceId") REFERENCES "subscription_invoices"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
Reference in New Issue
Block a user