Co-Authored-By: Claude Opus 5.5 (1M context) <noreply@anthropic.com>
82 lines
2.7 KiB
SQL
82 lines
2.7 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "OfferLimit" AS ENUM ('NONE', 'ONCE', 'WEEK', 'MONTH');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "PartnerRole" AS ENUM ('OWNER', 'STAFF');
|
|
|
|
-- AlterTable
|
|
ALTER TABLE "CardUsage" ADD COLUMN "level" TEXT,
|
|
ADD COLUMN "memberUserId" TEXT,
|
|
ADD COLUMN "offerId" TEXT;
|
|
|
|
-- AlterTable
|
|
ALTER TABLE "Partner" ADD COLUMN "ownerInviteCode" TEXT;
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "PartnerOffer" (
|
|
"id" TEXT NOT NULL,
|
|
"partnerId" TEXT NOT NULL,
|
|
"title" JSONB NOT NULL,
|
|
"minLevel" "SubscriptionPlan",
|
|
"limit" "OfferLimit" NOT NULL DEFAULT 'NONE',
|
|
"limitCount" INTEGER NOT NULL DEFAULT 1,
|
|
"active" BOOLEAN NOT NULL DEFAULT true,
|
|
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
|
|
CONSTRAINT "PartnerOffer_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "PartnerMember" (
|
|
"id" TEXT NOT NULL,
|
|
"partnerId" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"role" "PartnerRole" NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "PartnerMember_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "PartnerInvite" (
|
|
"id" TEXT NOT NULL,
|
|
"code" TEXT NOT NULL,
|
|
"partnerId" TEXT NOT NULL,
|
|
"expiresAt" TIMESTAMP(3) NOT NULL,
|
|
"usedAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "PartnerInvite_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "PartnerMember_partnerId_userId_key" ON "PartnerMember"("partnerId", "userId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "PartnerInvite_code_key" ON "PartnerInvite"("code");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "CardUsage_clientId_offerId_createdAt_idx" ON "CardUsage"("clientId", "offerId", "createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "CardUsage_partnerId_createdAt_idx" ON "CardUsage"("partnerId", "createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Partner_ownerInviteCode_key" ON "Partner"("ownerInviteCode");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "PartnerOffer" ADD CONSTRAINT "PartnerOffer_partnerId_fkey" FOREIGN KEY ("partnerId") REFERENCES "Partner"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "PartnerMember" ADD CONSTRAINT "PartnerMember_partnerId_fkey" FOREIGN KEY ("partnerId") REFERENCES "Partner"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "PartnerMember" ADD CONSTRAINT "PartnerMember_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "PartnerInvite" ADD CONSTRAINT "PartnerInvite_partnerId_fkey" FOREIGN KEY ("partnerId") REFERENCES "Partner"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "CardUsage" ADD CONSTRAINT "CardUsage_offerId_fkey" FOREIGN KEY ("offerId") REFERENCES "PartnerOffer"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|