Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
107 lines
3.4 KiB
SQL
107 lines
3.4 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "ClientSegment" AS ENUM ('MOVING', 'LIVING');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "LeadStepStatus" AS ENUM ('TODO', 'IN_PROGRESS', 'DONE', 'SKIPPED');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "ClientRequestKind" AS ENUM ('SUBSCRIPTION', 'SERVICE');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "ClientRequestStatus" AS ENUM ('NEW', 'DONE', 'CANCELLED');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "ConciergeAuthor" AS ENUM ('CLIENT', 'OPERATOR');
|
|
|
|
-- AlterEnum
|
|
ALTER TYPE "SubscriptionPlan" ADD VALUE 'ELITE';
|
|
|
|
-- AlterTable
|
|
ALTER TABLE "Category" ADD COLUMN "eliteDiscountPct" INTEGER NOT NULL DEFAULT 0;
|
|
|
|
-- AlterTable
|
|
ALTER TABLE "Client" ADD COLUMN "segment" "ClientSegment";
|
|
|
|
-- AlterTable
|
|
ALTER TABLE "Lead" ADD COLUMN "checklist" TEXT[] DEFAULT ARRAY[]::TEXT[],
|
|
ADD COLUMN "clientId" TEXT;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "LeadStep" (
|
|
"id" TEXT NOT NULL,
|
|
"leadId" TEXT NOT NULL,
|
|
"code" TEXT NOT NULL,
|
|
"sortOrder" INTEGER NOT NULL,
|
|
"status" "LeadStepStatus" NOT NULL DEFAULT 'TODO',
|
|
"note" TEXT,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "LeadStep_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ClientRequest" (
|
|
"id" TEXT NOT NULL,
|
|
"number" SERIAL NOT NULL,
|
|
"clientId" TEXT NOT NULL,
|
|
"kind" "ClientRequestKind" NOT NULL,
|
|
"plan" "SubscriptionPlan",
|
|
"serviceCode" TEXT,
|
|
"comment" TEXT,
|
|
"status" "ClientRequestStatus" NOT NULL DEFAULT 'NEW',
|
|
"adminNote" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "ClientRequest_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ConciergeMessage" (
|
|
"id" TEXT NOT NULL,
|
|
"clientId" TEXT NOT NULL,
|
|
"author" "ConciergeAuthor" NOT NULL,
|
|
"adminUserId" TEXT,
|
|
"text" TEXT NOT NULL,
|
|
"readAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "ConciergeMessage_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "LeadStep_leadId_code_key" ON "LeadStep"("leadId", "code");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "ClientRequest_number_key" ON "ClientRequest"("number");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "ClientRequest_status_createdAt_idx" ON "ClientRequest"("status", "createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "ClientRequest_clientId_idx" ON "ClientRequest"("clientId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "ConciergeMessage_clientId_createdAt_idx" ON "ConciergeMessage"("clientId", "createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "ConciergeMessage_author_readAt_idx" ON "ConciergeMessage"("author", "readAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Lead_clientId_idx" ON "Lead"("clientId");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Lead" ADD CONSTRAINT "Lead_clientId_fkey" FOREIGN KEY ("clientId") REFERENCES "Client"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "LeadStep" ADD CONSTRAINT "LeadStep_leadId_fkey" FOREIGN KEY ("leadId") REFERENCES "Lead"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "ClientRequest" ADD CONSTRAINT "ClientRequest_clientId_fkey" FOREIGN KEY ("clientId") REFERENCES "Client"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "ConciergeMessage" ADD CONSTRAINT "ConciergeMessage_clientId_fkey" FOREIGN KEY ("clientId") REFERENCES "Client"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- Elite: скидки по направлениям как на главной («до −35%»)
|
|
UPDATE "Category" SET "eliteDiscountPct" = 35 WHERE "code" IN ('HOME', 'DOCS', 'LEARNING');
|