-- CreateTable CREATE TABLE "TeamMember" ( "id" TEXT NOT NULL, "accountId" TEXT NOT NULL, "teamId" TEXT NOT NULL, "membershipId" TEXT NOT NULL, "isPrimary" BOOLEAN NOT NULL DEFAULT true, "position" INTEGER NOT NULL DEFAULT 0, CONSTRAINT "TeamMember_pkey" PRIMARY KEY ("id") ); -- CreateIndex CREATE INDEX "TeamMember_accountId_idx" ON "TeamMember"("accountId"); -- CreateIndex CREATE INDEX "TeamMember_membershipId_idx" ON "TeamMember"("membershipId"); -- CreateIndex CREATE UNIQUE INDEX "TeamMember_teamId_membershipId_key" ON "TeamMember"("teamId", "membershipId"); -- AddForeignKey ALTER TABLE "TeamMember" ADD CONSTRAINT "TeamMember_teamId_fkey" FOREIGN KEY ("teamId") REFERENCES "Team"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "TeamMember" ADD CONSTRAINT "TeamMember_membershipId_fkey" FOREIGN KEY ("membershipId") REFERENCES "Membership"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- Isolation : `TeamMember` porte accountId, donc la politique est exigible. ALTER TABLE "TeamMember" ENABLE ROW LEVEL SECURITY; ALTER TABLE "TeamMember" FORCE ROW LEVEL SECURITY; CREATE POLICY tenant_isolation ON "TeamMember" USING ("accountId" = planflow_current_account()); CREATE POLICY tenant_insert ON "TeamMember" FOR INSERT WITH CHECK ("accountId" = planflow_current_account());