150 lines
6.7 KiB
SQL
150 lines
6.7 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "CatalogRequestStatus" AS ENUM ('new', 'approved', 'ready_to_ship', 'delivered', 'returned', 'cancelled');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "CatalogItemHolderType" AS ENUM ('warehouse', 'customer', 'agent');
|
|
|
|
-- AlterTable SystemSettings
|
|
ALTER TABLE "SystemSettings" ADD COLUMN IF NOT EXISTS "minOrderRollsPerProduct" INTEGER NOT NULL DEFAULT 1;
|
|
ALTER TABLE "SystemSettings" ADD COLUMN IF NOT EXISTS "showCatalogPublicPrice" BOOLEAN NOT NULL DEFAULT false;
|
|
|
|
-- CreateTable Brand
|
|
CREATE TABLE "Brand" (
|
|
"id" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"slug" TEXT,
|
|
"description" TEXT,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"displayOrder" INTEGER NOT NULL DEFAULT 0,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
CONSTRAINT "Brand_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE UNIQUE INDEX "Brand_slug_key" ON "Brand"("slug");
|
|
|
|
-- CreateTable CustomerLevelDef
|
|
CREATE TABLE "CustomerLevelDef" (
|
|
"id" TEXT NOT NULL,
|
|
"code" TEXT NOT NULL,
|
|
"label" TEXT NOT NULL,
|
|
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
"criteriaJson" JSONB,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
CONSTRAINT "CustomerLevelDef_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE UNIQUE INDEX "CustomerLevelDef_code_key" ON "CustomerLevelDef"("code");
|
|
|
|
-- CreateTable LevelBenefit
|
|
CREATE TABLE "LevelBenefit" (
|
|
"id" TEXT NOT NULL,
|
|
"levelId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
CONSTRAINT "LevelBenefit_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE INDEX "LevelBenefit_levelId_idx" ON "LevelBenefit"("levelId");
|
|
|
|
-- AlterTable Customer
|
|
ALTER TABLE "Customer" ADD COLUMN IF NOT EXISTS "levelDefId" TEXT;
|
|
|
|
CREATE INDEX IF NOT EXISTS "Customer_levelDefId_idx" ON "Customer"("levelDefId");
|
|
|
|
-- CreateTable CustomerBrand
|
|
CREATE TABLE "CustomerBrand" (
|
|
"customerId" TEXT NOT NULL,
|
|
"brandId" TEXT NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "CustomerBrand_pkey" PRIMARY KEY ("customerId","brandId")
|
|
);
|
|
|
|
CREATE INDEX "CustomerBrand_brandId_idx" ON "CustomerBrand"("brandId");
|
|
|
|
-- CreateTable CatalogRequest
|
|
CREATE TABLE "CatalogRequest" (
|
|
"id" TEXT NOT NULL,
|
|
"customerId" TEXT NOT NULL,
|
|
"status" "CatalogRequestStatus" NOT NULL DEFAULT 'new',
|
|
"note" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
CONSTRAINT "CatalogRequest_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE INDEX "CatalogRequest_customerId_idx" ON "CatalogRequest"("customerId");
|
|
CREATE INDEX "CatalogRequest_status_idx" ON "CatalogRequest"("status");
|
|
|
|
-- CreateTable CatalogRequestItem
|
|
CREATE TABLE "CatalogRequestItem" (
|
|
"id" TEXT NOT NULL,
|
|
"requestId" TEXT NOT NULL,
|
|
"productId" TEXT NOT NULL,
|
|
"quantity" INTEGER NOT NULL DEFAULT 1,
|
|
"holderType" "CatalogItemHolderType" NOT NULL DEFAULT 'warehouse',
|
|
"holderCustomerId" TEXT,
|
|
CONSTRAINT "CatalogRequestItem_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE INDEX "CatalogRequestItem_requestId_idx" ON "CatalogRequestItem"("requestId");
|
|
CREATE INDEX "CatalogRequestItem_productId_idx" ON "CatalogRequestItem"("productId");
|
|
|
|
-- CreateTable CatalogItemMovement
|
|
CREATE TABLE "CatalogItemMovement" (
|
|
"id" TEXT NOT NULL,
|
|
"itemId" TEXT NOT NULL,
|
|
"fromHolder" TEXT NOT NULL,
|
|
"toHolder" TEXT NOT NULL,
|
|
"note" TEXT,
|
|
"movedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "CatalogItemMovement_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE INDEX "CatalogItemMovement_itemId_idx" ON "CatalogItemMovement"("itemId");
|
|
|
|
-- CreateTable StockNotifyRequest
|
|
CREATE TABLE "StockNotifyRequest" (
|
|
"id" TEXT NOT NULL,
|
|
"customerId" TEXT NOT NULL,
|
|
"productId" TEXT NOT NULL,
|
|
"active" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"notifiedAt" TIMESTAMP(3),
|
|
CONSTRAINT "StockNotifyRequest_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE UNIQUE INDEX "StockNotifyRequest_customerId_productId_key" ON "StockNotifyRequest"("customerId", "productId");
|
|
CREATE INDEX "StockNotifyRequest_productId_active_idx" ON "StockNotifyRequest"("productId", "active");
|
|
|
|
-- CreateTable ProductSuggestion
|
|
CREATE TABLE "ProductSuggestion" (
|
|
"id" TEXT NOT NULL,
|
|
"customerId" TEXT NOT NULL,
|
|
"productId" TEXT NOT NULL,
|
|
"note" TEXT,
|
|
"createdByAdminId" TEXT,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
CONSTRAINT "ProductSuggestion_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE INDEX "ProductSuggestion_customerId_isActive_idx" ON "ProductSuggestion"("customerId", "isActive");
|
|
CREATE INDEX "ProductSuggestion_productId_idx" ON "ProductSuggestion"("productId");
|
|
|
|
-- FKs
|
|
ALTER TABLE "Customer" ADD CONSTRAINT "Customer_levelDefId_fkey" FOREIGN KEY ("levelDefId") REFERENCES "CustomerLevelDef"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
ALTER TABLE "LevelBenefit" ADD CONSTRAINT "LevelBenefit_levelId_fkey" FOREIGN KEY ("levelId") REFERENCES "CustomerLevelDef"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "CustomerBrand" ADD CONSTRAINT "CustomerBrand_customerId_fkey" FOREIGN KEY ("customerId") REFERENCES "Customer"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "CustomerBrand" ADD CONSTRAINT "CustomerBrand_brandId_fkey" FOREIGN KEY ("brandId") REFERENCES "Brand"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "CatalogRequest" ADD CONSTRAINT "CatalogRequest_customerId_fkey" FOREIGN KEY ("customerId") REFERENCES "Customer"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "CatalogRequestItem" ADD CONSTRAINT "CatalogRequestItem_requestId_fkey" FOREIGN KEY ("requestId") REFERENCES "CatalogRequest"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "CatalogRequestItem" ADD CONSTRAINT "CatalogRequestItem_productId_fkey" FOREIGN KEY ("productId") REFERENCES "Product"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
ALTER TABLE "CatalogItemMovement" ADD CONSTRAINT "CatalogItemMovement_itemId_fkey" FOREIGN KEY ("itemId") REFERENCES "CatalogRequestItem"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "StockNotifyRequest" ADD CONSTRAINT "StockNotifyRequest_customerId_fkey" FOREIGN KEY ("customerId") REFERENCES "Customer"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "StockNotifyRequest" ADD CONSTRAINT "StockNotifyRequest_productId_fkey" FOREIGN KEY ("productId") REFERENCES "Product"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "ProductSuggestion" ADD CONSTRAINT "ProductSuggestion_customerId_fkey" FOREIGN KEY ("customerId") REFERENCES "Customer"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
ALTER TABLE "ProductSuggestion" ADD CONSTRAINT "ProductSuggestion_productId_fkey" FOREIGN KEY ("productId") REFERENCES "Product"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|