-- CreateEnum CREATE TYPE "CustomFieldEntity" AS ENUM ('person', 'company', 'deal'); -- CreateEnum CREATE TYPE "CustomFieldType" AS ENUM ('text', 'number', 'date', 'boolean', 'select'); -- AlterTable ALTER TABLE "Company" ADD COLUMN "customFields" JSONB NOT NULL DEFAULT '{}'; -- AlterTable ALTER TABLE "Deal" ADD COLUMN "customFields" JSONB NOT NULL DEFAULT '{}'; -- AlterTable ALTER TABLE "Person" ADD COLUMN "customFields" JSONB NOT NULL DEFAULT '{}'; -- CreateTable CREATE TABLE "CustomFieldDefinition" ( "id" TEXT NOT NULL, "organizationId" TEXT NOT NULL, "entityType" "CustomFieldEntity" NOT NULL, "key" TEXT NOT NULL, "label" TEXT NOT NULL, "fieldType" "CustomFieldType" NOT NULL DEFAULT 'text', "options" TEXT[] DEFAULT ARRAY[]::TEXT[], "required" BOOLEAN NOT NULL DEFAULT false, "position" INTEGER NOT NULL DEFAULT 0, "isActive" BOOLEAN NOT NULL DEFAULT true, "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL, CONSTRAINT "CustomFieldDefinition_pkey" PRIMARY KEY ("id") ); -- CreateIndex CREATE INDEX "CustomFieldDefinition_organizationId_entityType_position_idx" ON "CustomFieldDefinition"("organizationId", "entityType", "position"); -- CreateIndex CREATE UNIQUE INDEX "CustomFieldDefinition_organizationId_entityType_key_key" ON "CustomFieldDefinition"("organizationId", "entityType", "key"); -- AddForeignKey ALTER TABLE "CustomFieldDefinition" ADD CONSTRAINT "CustomFieldDefinition_organizationId_fkey" FOREIGN KEY ("organizationId") REFERENCES "Organization"("id") ON DELETE CASCADE ON UPDATE CASCADE;