CREATE TYPE "CircleRole" AS ENUM ('MEMBER', 'LEAD'); CREATE TABLE "Circle" ( "id" TEXT NOT NULL, "tenantId" TEXT NOT NULL, "name" TEXT NOT NULL, "description" TEXT, "isPublic" BOOLEAN NOT NULL DEFAULT true, "createdBy" TEXT NOT NULL, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL, CONSTRAINT "Circle_pkey" PRIMARY KEY ("id") ); CREATE TABLE "CircleMembership" ( "id" TEXT NOT NULL, "circleId" TEXT NOT NULL, "userId" TEXT NOT NULL, "role" "CircleRole" NOT NULL DEFAULT 'MEMBER', "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, CONSTRAINT "CircleMembership_pkey" PRIMARY KEY ("id") ); CREATE UNIQUE INDEX "Circle_tenantId_name_key" ON "Circle"("tenantId", "name"); CREATE INDEX "Circle_tenantId_isPublic_idx" ON "Circle"("tenantId", "isPublic"); CREATE UNIQUE INDEX "CircleMembership_circleId_userId_key" ON "CircleMembership"("circleId", "userId"); CREATE INDEX "CircleMembership_userId_idx" ON "CircleMembership"("userId"); ALTER TABLE "Circle" ADD CONSTRAINT "Circle_tenantId_fkey" FOREIGN KEY ("tenantId") REFERENCES "Tenant"("id") ON DELETE RESTRICT ON UPDATE CASCADE; ALTER TABLE "CircleMembership" ADD CONSTRAINT "CircleMembership_circleId_fkey" FOREIGN KEY ("circleId") REFERENCES "Circle"("id") ON DELETE CASCADE ON UPDATE CASCADE; ALTER TABLE "CircleMembership" ADD CONSTRAINT "CircleMembership_userId_fkey" FOREIGN KEY ("userId") REFERENCES "TowerUser"("id") ON DELETE RESTRICT ON UPDATE CASCADE;