186 lines
5.9 KiB
SQL
186 lines
5.9 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "OperatorCode" AS ENUM ('ORANGE', 'MTN', 'AIRTEL', 'VODACOM', 'MOOV');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "PaymentStatus" AS ENUM ('PENDING', 'SUCCESS', 'FAILED', 'REFUNDED');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "SubscriptionStatus" AS ENUM ('PENDING', 'TRIAL', 'ACTIVE', 'SUSPENDED', 'CANCELLED', 'EXPIRED', 'FAILED');
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Partner" (
|
|
"id" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"email" TEXT NOT NULL,
|
|
"apiKey" TEXT NOT NULL,
|
|
"secretKey" TEXT NOT NULL,
|
|
"status" TEXT NOT NULL,
|
|
"callbacks" JSONB,
|
|
"metadata" JSONB,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Partner_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Operator" (
|
|
"id" TEXT NOT NULL,
|
|
"code" "OperatorCode" NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"country" TEXT NOT NULL,
|
|
"config" JSONB NOT NULL,
|
|
"active" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Operator_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "User" (
|
|
"id" TEXT NOT NULL,
|
|
"msisdn" TEXT NOT NULL,
|
|
"userToken" TEXT NOT NULL,
|
|
"userAlias" TEXT NOT NULL,
|
|
"operatorId" TEXT NOT NULL,
|
|
"partnerId" TEXT NOT NULL,
|
|
"country" TEXT NOT NULL,
|
|
"metadata" JSONB,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Plan" (
|
|
"id" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"amount" DOUBLE PRECISION NOT NULL,
|
|
"currency" TEXT NOT NULL,
|
|
"interval" TEXT NOT NULL,
|
|
"metadata" JSONB,
|
|
"active" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Plan_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Subscription" (
|
|
"id" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"planId" TEXT NOT NULL,
|
|
"partnerId" TEXT NOT NULL,
|
|
"status" "SubscriptionStatus" NOT NULL,
|
|
"currentPeriodStart" TIMESTAMP(3) NOT NULL,
|
|
"currentPeriodEnd" TIMESTAMP(3) NOT NULL,
|
|
"nextBillingDate" TIMESTAMP(3),
|
|
"trialEndsAt" TIMESTAMP(3),
|
|
"cancelledAt" TIMESTAMP(3),
|
|
"suspendedAt" TIMESTAMP(3),
|
|
"failureCount" INTEGER NOT NULL DEFAULT 0,
|
|
"renewalCount" INTEGER NOT NULL DEFAULT 0,
|
|
"lastPaymentId" TEXT,
|
|
"metadata" JSONB,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Subscription_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Payment" (
|
|
"id" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"partnerId" TEXT NOT NULL,
|
|
"subscriptionId" TEXT,
|
|
"amount" DOUBLE PRECISION NOT NULL,
|
|
"currency" TEXT NOT NULL,
|
|
"description" TEXT NOT NULL,
|
|
"reference" TEXT NOT NULL,
|
|
"operatorReference" TEXT,
|
|
"status" "PaymentStatus" NOT NULL,
|
|
"failureReason" TEXT,
|
|
"metadata" JSONB,
|
|
"completedAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Payment_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Refund" (
|
|
"id" TEXT NOT NULL,
|
|
"paymentId" TEXT NOT NULL,
|
|
"amount" DOUBLE PRECISION NOT NULL,
|
|
"reason" TEXT,
|
|
"status" TEXT NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Refund_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Webhook" (
|
|
"id" TEXT NOT NULL,
|
|
"url" TEXT NOT NULL,
|
|
"event" TEXT NOT NULL,
|
|
"payload" JSONB NOT NULL,
|
|
"response" JSONB,
|
|
"status" TEXT NOT NULL,
|
|
"attempts" INTEGER NOT NULL DEFAULT 0,
|
|
"lastAttempt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Webhook_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Partner_email_key" ON "Partner"("email");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Partner_apiKey_key" ON "Partner"("apiKey");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "User_msisdn_key" ON "User"("msisdn");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "User_userToken_key" ON "User"("userToken");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Payment_reference_key" ON "Payment"("reference");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "User" ADD CONSTRAINT "User_operatorId_fkey" FOREIGN KEY ("operatorId") REFERENCES "Operator"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "User" ADD CONSTRAINT "User_partnerId_fkey" FOREIGN KEY ("partnerId") REFERENCES "Partner"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Subscription" ADD CONSTRAINT "Subscription_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Subscription" ADD CONSTRAINT "Subscription_planId_fkey" FOREIGN KEY ("planId") REFERENCES "Plan"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Subscription" ADD CONSTRAINT "Subscription_partnerId_fkey" FOREIGN KEY ("partnerId") REFERENCES "Partner"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Payment" ADD CONSTRAINT "Payment_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Payment" ADD CONSTRAINT "Payment_partnerId_fkey" FOREIGN KEY ("partnerId") REFERENCES "Partner"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Payment" ADD CONSTRAINT "Payment_subscriptionId_fkey" FOREIGN KEY ("subscriptionId") REFERENCES "Subscription"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Refund" ADD CONSTRAINT "Refund_paymentId_fkey" FOREIGN KEY ("paymentId") REFERENCES "Payment"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|