Provide backend for admin and user apps with Postgres, migrations, seed data, and docker-compose for LiteSpeed reverse-proxy deployment. Co-authored-by: Cursor <cursoragent@cursor.com>
470 lines
15 KiB
SQL
470 lines
15 KiB
SQL
-- CreateSchema
|
|
CREATE SCHEMA IF NOT EXISTS "public";
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "SettlementType" AS ENUM ('cash', 'check');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "CheckRegistrationMode" AS ENUM ('full', 'brief');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "OrderStatus" AS ENUM ('cart', 'awaiting_settlement', 'cash_in_progress', 'check_in_progress', 'submitted', 'awaiting_review', 'pricing', 'needs_correction', 'awaiting_settlement_fix', 'cash_invoice_issued', 'awaiting_cash_payment', 'cash_payment_submitted', 'awaiting_cash_confirmation', 'cash_confirmed', 'awaiting_check_review', 'check_needs_fix', 'check_rejected', 'checks_approved', 'final_approved', 'preparing', 'ready_to_ship', 'shipped', 'delivered', 'cancelled', 'rejected', 'expired');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "CheckStatus" AS ENUM ('pending_review', 'approved', 'rejected');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "CashPaymentStatus" AS ENUM ('pending_review', 'approved', 'rejected', 'expired');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "ShipmentStatus" AS ENUM ('preparing', 'ready', 'shipped', 'delivered');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "CustomerType" AS ENUM ('wholesale', 'retail');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "AdminRole" AS ENUM ('admin', 'sales', 'finance', 'warehouse');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "NotificationTone" AS ENUM ('info', 'warning', 'success', 'danger');
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Company" (
|
|
"id" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"slug" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"logoUrl" TEXT,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"displayOrder" INTEGER NOT NULL DEFAULT 0,
|
|
"maxMeteragePerInvoice" INTEGER NOT NULL DEFAULT 5000,
|
|
"cashInvoiceValidityHours" INTEGER NOT NULL DEFAULT 8,
|
|
"cashInvoiceValidUntilHour" INTEGER,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Company_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "BankAccount" (
|
|
"id" TEXT NOT NULL,
|
|
"companyId" TEXT NOT NULL,
|
|
"bankName" TEXT NOT NULL,
|
|
"accountHolder" TEXT NOT NULL,
|
|
"accountNumber" TEXT NOT NULL,
|
|
"cardNumber" TEXT NOT NULL,
|
|
"iban" TEXT NOT NULL,
|
|
"notes" 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 "BankAccount_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Catalog" (
|
|
"id" TEXT NOT NULL,
|
|
"companyId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"code" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"displayOrder" 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 "Catalog_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Product" (
|
|
"id" TEXT NOT NULL,
|
|
"companyId" TEXT NOT NULL,
|
|
"catalogId" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"code" TEXT NOT NULL,
|
|
"color" TEXT NOT NULL,
|
|
"description" TEXT,
|
|
"minMeterage" DOUBLE PRECISION NOT NULL DEFAULT 30,
|
|
"orderMultiplier" DOUBLE PRECISION NOT NULL DEFAULT 10,
|
|
"basePrice" DOUBLE PRECISION,
|
|
"stock" DOUBLE PRECISION,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Product_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Customer" (
|
|
"id" TEXT NOT NULL,
|
|
"firstName" TEXT NOT NULL,
|
|
"lastName" TEXT NOT NULL,
|
|
"phone" TEXT NOT NULL,
|
|
"nationalId" TEXT,
|
|
"customerType" "CustomerType" NOT NULL DEFAULT 'wholesale',
|
|
"companyId" TEXT,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Customer_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "AdminUser" (
|
|
"id" TEXT NOT NULL,
|
|
"fullName" TEXT NOT NULL,
|
|
"phone" TEXT NOT NULL,
|
|
"email" TEXT NOT NULL,
|
|
"passwordHash" TEXT NOT NULL,
|
|
"role" "AdminRole" NOT NULL DEFAULT 'admin',
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"lastLoginAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "AdminUser_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "OtpChallenge" (
|
|
"id" TEXT NOT NULL,
|
|
"phone" TEXT NOT NULL,
|
|
"code" TEXT NOT NULL,
|
|
"firstName" TEXT,
|
|
"lastName" TEXT,
|
|
"isRegister" BOOLEAN NOT NULL DEFAULT false,
|
|
"expiresAt" TIMESTAMP(3) NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "OtpChallenge_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Cart" (
|
|
"id" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"companyId" TEXT,
|
|
"notes" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Cart_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "CartItem" (
|
|
"id" TEXT NOT NULL,
|
|
"cartId" TEXT NOT NULL,
|
|
"productId" TEXT NOT NULL,
|
|
"catalogCode" TEXT NOT NULL,
|
|
"productName" TEXT NOT NULL,
|
|
"productCode" TEXT NOT NULL,
|
|
"color" TEXT NOT NULL,
|
|
"meterage" DOUBLE PRECISION NOT NULL,
|
|
"unitPrice" DOUBLE PRECISION,
|
|
"notes" TEXT,
|
|
"companyId" TEXT NOT NULL,
|
|
"companyName" TEXT NOT NULL,
|
|
|
|
CONSTRAINT "CartItem_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Order" (
|
|
"id" TEXT NOT NULL,
|
|
"orderNumber" TEXT NOT NULL,
|
|
"userId" TEXT NOT NULL,
|
|
"companyId" TEXT NOT NULL,
|
|
"companyName" TEXT NOT NULL,
|
|
"settlementType" "SettlementType" NOT NULL,
|
|
"checkMode" "CheckRegistrationMode",
|
|
"status" "OrderStatus" NOT NULL DEFAULT 'awaiting_review',
|
|
"totalMeterage" DOUBLE PRECISION NOT NULL DEFAULT 0,
|
|
"totalAmount" DOUBLE PRECISION,
|
|
"shippingCost" DOUBLE PRECISION,
|
|
"totalDiscount" DOUBLE PRECISION,
|
|
"finalAmount" DOUBLE PRECISION,
|
|
"notes" TEXT,
|
|
"checkRassDays" INTEGER,
|
|
"checkRassDate" TIMESTAMP(3),
|
|
"cashInvoiceExpiresAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Order_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "OrderItem" (
|
|
"id" TEXT NOT NULL,
|
|
"orderId" TEXT NOT NULL,
|
|
"productId" TEXT,
|
|
"catalogCode" TEXT NOT NULL,
|
|
"productName" TEXT NOT NULL,
|
|
"productCode" TEXT,
|
|
"color" TEXT NOT NULL,
|
|
"requestedMeterage" DOUBLE PRECISION NOT NULL,
|
|
"confirmedMeterage" DOUBLE PRECISION,
|
|
"unitPrice" DOUBLE PRECISION,
|
|
"unitDiscount" DOUBLE PRECISION DEFAULT 0,
|
|
"lineTotal" DOUBLE PRECISION,
|
|
"notes" TEXT,
|
|
|
|
CONSTRAINT "OrderItem_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "OrderStatusHistory" (
|
|
"id" TEXT NOT NULL,
|
|
"orderId" TEXT NOT NULL,
|
|
"fromStatus" "OrderStatus",
|
|
"toStatus" "OrderStatus" NOT NULL,
|
|
"changedBy" TEXT NOT NULL,
|
|
"note" TEXT,
|
|
"reason" TEXT,
|
|
"changedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "OrderStatusHistory_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Check" (
|
|
"id" TEXT NOT NULL,
|
|
"orderId" TEXT NOT NULL,
|
|
"row" INTEGER NOT NULL,
|
|
"amount" DOUBLE PRECISION NOT NULL,
|
|
"dueDate" TIMESTAMP(3) NOT NULL,
|
|
"sayadId" TEXT,
|
|
"checkNumber" TEXT,
|
|
"ownerNationalId" TEXT,
|
|
"ownerFirstName" TEXT,
|
|
"ownerLastName" TEXT,
|
|
"bankName" TEXT,
|
|
"branchName" TEXT,
|
|
"frontImage" TEXT,
|
|
"backImage" TEXT,
|
|
"notes" TEXT,
|
|
"mode" "CheckRegistrationMode" NOT NULL DEFAULT 'full',
|
|
"status" "CheckStatus" NOT NULL DEFAULT 'pending_review',
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Check_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "CashPaymentReceipt" (
|
|
"id" TEXT NOT NULL,
|
|
"orderId" TEXT NOT NULL,
|
|
"amount" DOUBLE PRECISION NOT NULL,
|
|
"paidAmount" DOUBLE PRECISION,
|
|
"transferDate" TIMESTAMP(3),
|
|
"transferTime" TEXT,
|
|
"trackingNumber" TEXT,
|
|
"destinationAccountId" TEXT,
|
|
"receiptImage" TEXT,
|
|
"notes" TEXT,
|
|
"expiresAt" TIMESTAMP(3),
|
|
"status" "CashPaymentStatus" NOT NULL DEFAULT 'pending_review',
|
|
"submittedAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "CashPaymentReceipt_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Shipment" (
|
|
"id" TEXT NOT NULL,
|
|
"orderId" TEXT NOT NULL,
|
|
"carrier" TEXT NOT NULL,
|
|
"trackingNumber" TEXT,
|
|
"meterage" DOUBLE PRECISION NOT NULL,
|
|
"status" "ShipmentStatus" NOT NULL DEFAULT 'preparing',
|
|
"shippedAt" TIMESTAMP(3),
|
|
"deliveredAt" TIMESTAMP(3),
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Shipment_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "SystemSettings" (
|
|
"id" TEXT NOT NULL DEFAULT 'default',
|
|
"maxMeteragePerInvoice" INTEGER NOT NULL DEFAULT 5000,
|
|
"cashInvoiceValidityHours" INTEGER NOT NULL DEFAULT 8,
|
|
"defaultSettlementCheck" BOOLEAN NOT NULL DEFAULT true,
|
|
"defaultSettlementCash" BOOLEAN NOT NULL DEFAULT true,
|
|
"smsOrderRegistered" BOOLEAN NOT NULL DEFAULT true,
|
|
"smsPaymentReminder" BOOLEAN NOT NULL DEFAULT true,
|
|
"smsCheckReview" BOOLEAN NOT NULL DEFAULT true,
|
|
"smsShippingUpdate" BOOLEAN NOT NULL DEFAULT true,
|
|
"supportPhone" TEXT,
|
|
"supportEmail" TEXT,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "SystemSettings_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "AdminNotification" (
|
|
"id" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"body" TEXT NOT NULL,
|
|
"tone" "NotificationTone" DEFAULT 'info',
|
|
"link" TEXT,
|
|
"isRead" BOOLEAN NOT NULL DEFAULT false,
|
|
"sentAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "AdminNotification_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "InternalMessage" (
|
|
"id" TEXT NOT NULL,
|
|
"senderName" TEXT NOT NULL,
|
|
"subject" TEXT NOT NULL,
|
|
"preview" TEXT NOT NULL,
|
|
"isRead" BOOLEAN NOT NULL DEFAULT false,
|
|
"sentAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "InternalMessage_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Company_slug_key" ON "Company"("slug");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "BankAccount_companyId_idx" ON "BankAccount"("companyId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Catalog_companyId_idx" ON "Catalog"("companyId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Catalog_companyId_code_key" ON "Catalog"("companyId", "code");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Product_catalogId_idx" ON "Product"("catalogId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Product_companyId_idx" ON "Product"("companyId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Product_companyId_code_key" ON "Product"("companyId", "code");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Customer_phone_key" ON "Customer"("phone");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Customer_companyId_idx" ON "Customer"("companyId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "AdminUser_phone_key" ON "AdminUser"("phone");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "AdminUser_email_key" ON "AdminUser"("email");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "OtpChallenge_phone_idx" ON "OtpChallenge"("phone");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Cart_userId_idx" ON "Cart"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "CartItem_cartId_idx" ON "CartItem"("cartId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "CartItem_cartId_productId_key" ON "CartItem"("cartId", "productId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Order_orderNumber_key" ON "Order"("orderNumber");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Order_userId_idx" ON "Order"("userId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Order_companyId_idx" ON "Order"("companyId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Order_status_idx" ON "Order"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Order_createdAt_idx" ON "Order"("createdAt");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "OrderItem_orderId_idx" ON "OrderItem"("orderId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "OrderStatusHistory_orderId_idx" ON "OrderStatusHistory"("orderId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Check_orderId_idx" ON "Check"("orderId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "Check_dueDate_idx" ON "Check"("dueDate");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "CashPaymentReceipt_orderId_key" ON "CashPaymentReceipt"("orderId");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Shipment_orderId_key" ON "Shipment"("orderId");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "BankAccount" ADD CONSTRAINT "BankAccount_companyId_fkey" FOREIGN KEY ("companyId") REFERENCES "Company"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Catalog" ADD CONSTRAINT "Catalog_companyId_fkey" FOREIGN KEY ("companyId") REFERENCES "Company"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Product" ADD CONSTRAINT "Product_companyId_fkey" FOREIGN KEY ("companyId") REFERENCES "Company"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Product" ADD CONSTRAINT "Product_catalogId_fkey" FOREIGN KEY ("catalogId") REFERENCES "Catalog"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Customer" ADD CONSTRAINT "Customer_companyId_fkey" FOREIGN KEY ("companyId") REFERENCES "Company"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Cart" ADD CONSTRAINT "Cart_userId_fkey" FOREIGN KEY ("userId") REFERENCES "Customer"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "CartItem" ADD CONSTRAINT "CartItem_cartId_fkey" FOREIGN KEY ("cartId") REFERENCES "Cart"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "CartItem" ADD CONSTRAINT "CartItem_productId_fkey" FOREIGN KEY ("productId") REFERENCES "Product"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Order" ADD CONSTRAINT "Order_userId_fkey" FOREIGN KEY ("userId") REFERENCES "Customer"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Order" ADD CONSTRAINT "Order_companyId_fkey" FOREIGN KEY ("companyId") REFERENCES "Company"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "OrderItem" ADD CONSTRAINT "OrderItem_orderId_fkey" FOREIGN KEY ("orderId") REFERENCES "Order"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "OrderItem" ADD CONSTRAINT "OrderItem_productId_fkey" FOREIGN KEY ("productId") REFERENCES "Product"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "OrderStatusHistory" ADD CONSTRAINT "OrderStatusHistory_orderId_fkey" FOREIGN KEY ("orderId") REFERENCES "Order"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Check" ADD CONSTRAINT "Check_orderId_fkey" FOREIGN KEY ("orderId") REFERENCES "Order"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "CashPaymentReceipt" ADD CONSTRAINT "CashPaymentReceipt_orderId_fkey" FOREIGN KEY ("orderId") REFERENCES "Order"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "CashPaymentReceipt" ADD CONSTRAINT "CashPaymentReceipt_destinationAccountId_fkey" FOREIGN KEY ("destinationAccountId") REFERENCES "BankAccount"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Shipment" ADD CONSTRAINT "Shipment_orderId_fkey" FOREIGN KEY ("orderId") REFERENCES "Order"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|