42 lines
1.6 KiB
SQL
42 lines
1.6 KiB
SQL
-- 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;
|