104 lines
3.2 KiB
SQL
104 lines
3.2 KiB
SQL
-- CreateEnum
|
|||
|
|
CREATE TYPE "UserRole" AS ENUM ('ADMIN', 'AGENT', 'CUSTOMER');
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE "users" (
|
||
|
|
"id" TEXT NOT NULL,
|
||
|
|
"email" TEXT NOT NULL,
|
||
|
|
"name" TEXT NOT NULL,
|
||
|
|
"role" "UserRole" NOT NULL DEFAULT 'CUSTOMER',
|
||
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||
|
|
|
||
|
|
CONSTRAINT "users_pkey" PRIMARY KEY ("id")
|
||
|
|
);
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE "products" (
|
||
|
|
"id" TEXT NOT NULL,
|
||
|
|
"externalProductId" TEXT NOT NULL,
|
||
|
|
"name" TEXT NOT NULL,
|
||
|
|
"supportEnabled" BOOLEAN NOT NULL DEFAULT true,
|
||
|
|
"status" TEXT NOT NULL DEFAULT 'active',
|
||
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||
|
|
|
||
|
|
CONSTRAINT "products_pkey" PRIMARY KEY ("id")
|
||
|
|
);
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE "product_integrations" (
|
||
|
|
"id" TEXT NOT NULL,
|
||
|
|
"productId" TEXT NOT NULL,
|
||
|
|
"credentialRef" TEXT NOT NULL,
|
||
|
|
"previousCredentialRef" TEXT,
|
||
|
|
"previousCredentialExpiresAt" TIMESTAMP(3),
|
||
|
|
"authMechanism" TEXT NOT NULL DEFAULT 'signed_token',
|
||
|
|
"allowedScope" JSONB NOT NULL,
|
||
|
|
"rateLimitPerMinute" INTEGER NOT NULL DEFAULT 60,
|
||
|
|
"rateLimitPerUserPerMinute" INTEGER NOT NULL DEFAULT 20,
|
||
|
|
"status" TEXT NOT NULL DEFAULT 'active',
|
||
|
|
"rotatedAt" TIMESTAMP(3),
|
||
|
|
"revokedAt" TIMESTAMP(3),
|
||
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
|
||
|
|
CONSTRAINT "product_integrations_pkey" PRIMARY KEY ("id")
|
||
|
|
);
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE "customer_references" (
|
||
|
|
"id" TEXT NOT NULL,
|
||
|
|
"externalUserId" TEXT NOT NULL,
|
||
|
|
"externalTenantId" TEXT NOT NULL,
|
||
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
|
||
|
|
CONSTRAINT "customer_references_pkey" PRIMARY KEY ("id")
|
||
|
|
);
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE "categories" (
|
||
|
|
"id" TEXT NOT NULL,
|
||
|
|
"productId" TEXT NOT NULL,
|
||
|
|
"name" TEXT NOT NULL,
|
||
|
|
"description" TEXT,
|
||
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||
|
|
|
||
|
|
CONSTRAINT "categories_pkey" PRIMARY KEY ("id")
|
||
|
|
);
|
||
|
|
|
||
|
|
-- CreateTable
|
||
|
|
CREATE TABLE "audit_logs" (
|
||
|
|
"id" TEXT NOT NULL,
|
||
|
|
"actor" TEXT NOT NULL,
|
||
|
|
"actorType" TEXT NOT NULL,
|
||
|
|
"action" TEXT NOT NULL,
|
||
|
|
"entityType" TEXT NOT NULL,
|
||
|
|
"entityId" TEXT NOT NULL,
|
||
|
|
"oldValue" JSONB,
|
||
|
|
"newValue" JSONB,
|
||
|
|
"reason" TEXT,
|
||
|
|
"metadata" JSONB,
|
||
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||
|
|
|
||
|
|
CONSTRAINT "audit_logs_pkey" PRIMARY KEY ("id")
|
||
|
|
);
|
||
|
|
|
||
|
|
-- CreateIndex
|
||
|
|
CREATE UNIQUE INDEX "users_email_key" ON "users"("email");
|
||
|
|
|
||
|
|
-- CreateIndex
|
||
|
|
CREATE UNIQUE INDEX "products_externalProductId_key" ON "products"("externalProductId");
|
||
|
|
|
||
|
|
-- CreateIndex
|
||
|
|
CREATE UNIQUE INDEX "product_integrations_productId_key" ON "product_integrations"("productId");
|
||
|
|
|
||
|
|
-- CreateIndex
|
||
|
|
CREATE UNIQUE INDEX "customer_references_externalUserId_externalTenantId_key" ON "customer_references"("externalUserId", "externalTenantId");
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE "product_integrations" ADD CONSTRAINT "product_integrations_productId_fkey" FOREIGN KEY ("productId") REFERENCES "products"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||
|
|
|
||
|
|
-- AddForeignKey
|
||
|
|
ALTER TABLE "categories" ADD CONSTRAINT "categories_productId_fkey" FOREIGN KEY ("productId") REFERENCES "products"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|