- Add SubscriberStatus (ACTIVE/SUSPENDED/CANCELLED) and BillingType (PREPAID/POSTPAID) enums - Add ServicePlan model with name, speed, monthlyPrice, billingType, soft-delete - Add Subscriber model with accountNumber, billingDay, status lifecycle, creditBalance - Add TenantSettings model with autoSuspendDays and prepaidLeadDays - Migrate: 20260304145633_add_subscriber_models - Extend prisma-tenant.ts with subscriber, servicePlan, tenantSettings query scoping - Create service-plan-service.ts: createServicePlan, updateServicePlan, listServicePlans, deactivateServicePlan - Create subscriber-service.ts: createSubscriber, updateSubscriber, changeSubscriberStatus, searchSubscribers, getSubscriber, generateAccountNumber
87 lines
2.7 KiB
SQL
87 lines
2.7 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "SubscriberStatus" AS ENUM ('ACTIVE', 'SUSPENDED', 'CANCELLED');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "BillingType" AS ENUM ('PREPAID', 'POSTPAID');
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "TenantSettings" (
|
|
"id" TEXT NOT NULL,
|
|
"tenantId" TEXT NOT NULL,
|
|
"autoSuspendDays" INTEGER NOT NULL DEFAULT 30,
|
|
"prepaidLeadDays" INTEGER NOT NULL DEFAULT 7,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "TenantSettings_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ServicePlan" (
|
|
"id" TEXT NOT NULL,
|
|
"tenantId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"speed" TEXT NOT NULL,
|
|
"monthlyPrice" DECIMAL(10,2) NOT NULL,
|
|
"billingType" "BillingType" NOT NULL,
|
|
"description" TEXT,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "ServicePlan_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Subscriber" (
|
|
"id" TEXT NOT NULL,
|
|
"tenantId" TEXT NOT NULL,
|
|
"accountNumber" TEXT NOT NULL,
|
|
"firstName" TEXT NOT NULL,
|
|
"lastName" TEXT NOT NULL,
|
|
"email" TEXT,
|
|
"phone" TEXT,
|
|
"address" TEXT NOT NULL,
|
|
"zone" TEXT,
|
|
"servicePlanId" TEXT NOT NULL,
|
|
"status" "SubscriberStatus" NOT NULL DEFAULT 'ACTIVE',
|
|
"billingDay" INTEGER NOT NULL,
|
|
"activatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"suspendedAt" TIMESTAMP(3),
|
|
"cancelledAt" TIMESTAMP(3),
|
|
"autoSuspendDays" INTEGER,
|
|
"notes" TEXT,
|
|
"creditBalance" DECIMAL(10,2) NOT NULL DEFAULT 0,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Subscriber_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "TenantSettings_tenantId_key" ON "TenantSettings"("tenantId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "TenantSettings_tenantId_idx" ON "TenantSettings"("tenantId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "ServicePlan_tenantId_idx" ON "ServicePlan"("tenantId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "ServicePlan_tenantId_name_key" ON "ServicePlan"("tenantId", "name");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Subscriber_tenantId_idx" ON "Subscriber"("tenantId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Subscriber_tenantId_status_idx" ON "Subscriber"("tenantId", "status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Subscriber_tenantId_servicePlanId_idx" ON "Subscriber"("tenantId", "servicePlanId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Subscriber_tenantId_accountNumber_key" ON "Subscriber"("tenantId", "accountNumber");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Subscriber" ADD CONSTRAINT "Subscriber_servicePlanId_fkey" FOREIGN KEY ("servicePlanId") REFERENCES "ServicePlan"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|