mirror of
https://github.com/Since-3/Kuma.git
synced 2026-10-12 19:51:17 +00:00
152 lines
5.6 KiB
SQL
152 lines
5.6 KiB
SQL
-- AlterTable
|
|
ALTER TABLE "DiscountCode" ADD COLUMN "appliesTo" TEXT NOT NULL DEFAULT 'courses',
|
|
ADD COLUMN "origin" TEXT NOT NULL DEFAULT 'manual',
|
|
ADD COLUMN "restrictedToUserId" TEXT;
|
|
|
|
-- AlterTable
|
|
ALTER TABLE "DiscountRedemption" ADD COLUMN "passId" TEXT;
|
|
|
|
-- AlterTable
|
|
ALTER TABLE "CustomerPass" ADD COLUMN "discountAmount" INTEGER,
|
|
ADD COLUMN "discountCodeId" TEXT;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "MarketingConsent" (
|
|
"id" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"businessId" TEXT NOT NULL,
|
|
"granted" BOOLEAN NOT NULL,
|
|
"textVersion" TEXT NOT NULL,
|
|
"source" TEXT NOT NULL,
|
|
"grantedAt" TIMESTAMP(3),
|
|
"revokedAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "MarketingConsent_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "MarketingNode" (
|
|
"id" TEXT NOT NULL,
|
|
"businessId" TEXT NOT NULL,
|
|
"kind" TEXT NOT NULL,
|
|
"config" JSONB NOT NULL,
|
|
"positionX" DOUBLE PRECISION NOT NULL,
|
|
"positionY" DOUBLE PRECISION NOT NULL,
|
|
"emailNodeId" TEXT,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT false,
|
|
"activatedAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "MarketingNode_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "MarketingSend" (
|
|
"id" TEXT NOT NULL,
|
|
"businessId" TEXT NOT NULL,
|
|
"userId" TEXT,
|
|
"triggerKind" TEXT NOT NULL,
|
|
"periodKey" TEXT NOT NULL,
|
|
"triggerNodeId" TEXT,
|
|
"emailNodeId" TEXT,
|
|
"discountCodeId" TEXT,
|
|
"status" TEXT NOT NULL DEFAULT 'pending',
|
|
"attempts" INTEGER NOT NULL DEFAULT 1,
|
|
"error" TEXT,
|
|
"subject" TEXT NOT NULL,
|
|
"sentAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "MarketingSend_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "MarketingAuditLog" (
|
|
"id" TEXT NOT NULL,
|
|
"businessId" TEXT NOT NULL,
|
|
"actorType" TEXT NOT NULL,
|
|
"actorId" TEXT,
|
|
"action" TEXT NOT NULL,
|
|
"nodeId" TEXT,
|
|
"userId" TEXT,
|
|
"summary" TEXT NOT NULL,
|
|
"before" JSONB,
|
|
"after" JSONB,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "MarketingAuditLog_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "MarketingConsent_businessId_granted_idx" ON "MarketingConsent"("businessId", "granted");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "MarketingConsent_userId_businessId_key" ON "MarketingConsent"("userId", "businessId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "MarketingNode_businessId_idx" ON "MarketingNode"("businessId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "MarketingNode_emailNodeId_idx" ON "MarketingNode"("emailNodeId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "MarketingSend_discountCodeId_key" ON "MarketingSend"("discountCodeId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "MarketingSend_businessId_createdAt_idx" ON "MarketingSend"("businessId", "createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "MarketingSend_triggerNodeId_idx" ON "MarketingSend"("triggerNodeId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "MarketingSend_emailNodeId_idx" ON "MarketingSend"("emailNodeId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "MarketingSend_businessId_userId_triggerKind_periodKey_key" ON "MarketingSend"("businessId", "userId", "triggerKind", "periodKey");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "MarketingAuditLog_businessId_createdAt_idx" ON "MarketingAuditLog"("businessId", "createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "MarketingAuditLog_userId_idx" ON "MarketingAuditLog"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "DiscountRedemption_passId_key" ON "DiscountRedemption"("passId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "CustomerPass_discountCodeId_idx" ON "CustomerPass"("discountCodeId");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "DiscountRedemption" ADD CONSTRAINT "DiscountRedemption_passId_fkey" FOREIGN KEY ("passId") REFERENCES "CustomerPass"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "CustomerPass" ADD CONSTRAINT "CustomerPass_discountCodeId_fkey" FOREIGN KEY ("discountCodeId") REFERENCES "DiscountCode"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "MarketingConsent" ADD CONSTRAINT "MarketingConsent_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "MarketingConsent" ADD CONSTRAINT "MarketingConsent_businessId_fkey" FOREIGN KEY ("businessId") REFERENCES "Business"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "MarketingNode" ADD CONSTRAINT "MarketingNode_businessId_fkey" FOREIGN KEY ("businessId") REFERENCES "Business"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "MarketingNode" ADD CONSTRAINT "MarketingNode_emailNodeId_fkey" FOREIGN KEY ("emailNodeId") REFERENCES "MarketingNode"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "MarketingSend" ADD CONSTRAINT "MarketingSend_businessId_fkey" FOREIGN KEY ("businessId") REFERENCES "Business"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "MarketingSend" ADD CONSTRAINT "MarketingSend_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "MarketingSend" ADD CONSTRAINT "MarketingSend_discountCodeId_fkey" FOREIGN KEY ("discountCodeId") REFERENCES "DiscountCode"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "MarketingAuditLog" ADD CONSTRAINT "MarketingAuditLog_businessId_fkey" FOREIGN KEY ("businessId") REFERENCES "Business"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|