diff --git a/prisma/migrations/20260718083544_init/migration.sql b/prisma/migrations/20260718083544_init/migration.sql new file mode 100644 index 0000000..8ca8354 --- /dev/null +++ b/prisma/migrations/20260718083544_init/migration.sql @@ -0,0 +1,556 @@ +-- CreateTable +CREATE TABLE "Category" ( + "id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "slug" TEXT NOT NULL, + "showOnPersonalised" BOOLEAN NOT NULL DEFAULT true, + "showOnProducts" BOOLEAN NOT NULL DEFAULT true, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "Category_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Product" ( + "id" TEXT NOT NULL, + "slug" TEXT NOT NULL, + "name" TEXT NOT NULL, + "category" TEXT NOT NULL, + "description" TEXT NOT NULL, + "basePrice" INTEGER NOT NULL, + "personalisedPrice" INTEGER, + "colors" TEXT NOT NULL, + "colorPhotos" TEXT, + "colorPhotosBack" TEXT, + "sizes" TEXT, + "mockup" TEXT NOT NULL, + "printArea" TEXT NOT NULL, + "printAreaBack" TEXT, + "imageUrl" TEXT, + "imageUrlBack" TEXT, + "photoRecolorable" BOOLEAN NOT NULL DEFAULT false, + "showOnPersonalised" BOOLEAN NOT NULL DEFAULT true, + "showOnProducts" BOOLEAN NOT NULL DEFAULT false, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "salePrice" INTEGER, + "saleStartsAt" TIMESTAMP(3), + "saleEndsAt" TIMESTAMP(3), + + CONSTRAINT "Product_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ProductImage" ( + "id" TEXT NOT NULL, + "productId" TEXT NOT NULL, + "color" TEXT NOT NULL, + "imageDataUrl" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "ProductImage_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "StockLevel" ( + "id" TEXT NOT NULL, + "productId" TEXT NOT NULL, + "color" TEXT NOT NULL, + "size" TEXT NOT NULL DEFAULT '', + "quantity" INTEGER NOT NULL DEFAULT 0, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "StockLevel_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Purchase" ( + "id" TEXT NOT NULL, + "supplierName" TEXT NOT NULL, + "purchasedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "invoiceDataUrl" TEXT, + "invoiceFileName" TEXT, + "total" INTEGER NOT NULL, + "notes" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "Purchase_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "PurchaseItem" ( + "id" TEXT NOT NULL, + "purchaseId" TEXT NOT NULL, + "productId" TEXT, + "description" TEXT NOT NULL, + "color" TEXT, + "size" TEXT, + "quantity" INTEGER NOT NULL, + "unitCost" INTEGER NOT NULL, + + CONSTRAINT "PurchaseItem_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Expense" ( + "id" TEXT NOT NULL, + "date" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "description" TEXT NOT NULL, + "category" TEXT NOT NULL DEFAULT 'Stock purchases', + "amount" INTEGER NOT NULL, + "receiptDataUrl" TEXT, + "receiptFileName" TEXT, + "notes" TEXT, + "purchaseId" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "Expense_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "DesignProof" ( + "id" TEXT NOT NULL, + "productId" TEXT NOT NULL, + "customerName" TEXT, + "customerEmail" TEXT NOT NULL, + "color" TEXT NOT NULL, + "quantity" INTEGER NOT NULL DEFAULT 1, + "unitPrice" INTEGER NOT NULL, + "imageDataUrl" TEXT NOT NULL, + "note" TEXT, + "status" TEXT NOT NULL DEFAULT 'PENDING', + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "DesignProof_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Message" ( + "id" TEXT NOT NULL, + "proofId" TEXT NOT NULL, + "sender" TEXT NOT NULL, + "body" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "Message_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Order" ( + "id" TEXT NOT NULL, + "stripeSessionId" TEXT, + "email" TEXT, + "shippingAddress" TEXT, + "status" TEXT NOT NULL DEFAULT 'PENDING', + "archived" BOOLEAN NOT NULL DEFAULT false, + "total" INTEGER NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + "customerId" TEXT, + "guestName" TEXT, + "guestPhone" TEXT, + + CONSTRAINT "Order_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Customer" ( + "id" TEXT NOT NULL, + "email" TEXT NOT NULL, + "passwordHash" TEXT NOT NULL, + "name" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "Customer_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ManualSale" ( + "id" TEXT NOT NULL, + "soldAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "buyerName" TEXT, + "buyerEmail" TEXT, + "customerId" TEXT, + "paymentMethod" TEXT NOT NULL, + "total" INTEGER NOT NULL, + "notes" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "ManualSale_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ManualSaleItem" ( + "id" TEXT NOT NULL, + "saleId" TEXT NOT NULL, + "productId" TEXT, + "description" TEXT NOT NULL, + "color" TEXT, + "size" TEXT, + "quantity" INTEGER NOT NULL, + "unitPrice" INTEGER NOT NULL, + + CONSTRAINT "ManualSaleItem_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "PasswordResetToken" ( + "id" TEXT NOT NULL, + "customerId" TEXT NOT NULL, + "token" TEXT NOT NULL, + "expiresAt" TIMESTAMP(3) NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "PasswordResetToken_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "CustomRequest" ( + "id" TEXT NOT NULL, + "customerId" TEXT, + "productId" TEXT NOT NULL, + "customerName" TEXT NOT NULL, + "customerEmail" TEXT NOT NULL, + "customerPhone" TEXT, + "imageDataUrl" TEXT NOT NULL, + "note" TEXT, + "status" TEXT NOT NULL DEFAULT 'NEW', + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "CustomRequest_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Promotion" ( + "id" TEXT NOT NULL, + "message" TEXT NOT NULL, + "discountPercent" INTEGER NOT NULL, + "scope" TEXT NOT NULL DEFAULT 'ALL', + "startsAt" TIMESTAMP(3), + "endsAt" TIMESTAMP(3), + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "Promotion_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Collection" ( + "id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "slug" TEXT NOT NULL, + "group" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "Collection_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "MailingListEntry" ( + "id" TEXT NOT NULL, + "email" TEXT NOT NULL, + "name" TEXT, + "source" TEXT NOT NULL, + "subscribed" BOOLEAN NOT NULL DEFAULT true, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "MailingListEntry_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "RateLimitAttempt" ( + "id" TEXT NOT NULL, + "key" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "RateLimitAttempt_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "SiteSetting" ( + "id" TEXT NOT NULL DEFAULT 'singleton', + "maintenanceMode" BOOLEAN NOT NULL DEFAULT false, + "maintenanceMessage" TEXT, + + CONSTRAINT "SiteSetting_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "NewsletterSubscriber" ( + "id" TEXT NOT NULL, + "email" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "NewsletterSubscriber_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "GalleryCategory" ( + "id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "slug" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "GalleryCategory_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "GalleryPhoto" ( + "id" TEXT NOT NULL, + "imageDataUrl" TEXT NOT NULL, + "caption" TEXT, + "categoryId" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "GalleryPhoto_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "OrderItem" ( + "id" TEXT NOT NULL, + "orderId" TEXT NOT NULL, + "productId" TEXT NOT NULL, + "productName" TEXT NOT NULL, + "quantity" INTEGER NOT NULL, + "color" TEXT NOT NULL, + "size" TEXT, + "unitPrice" INTEGER NOT NULL, + "designJson" TEXT NOT NULL, + "designPreviewUrl" TEXT NOT NULL, + "designPreviewUrlBack" TEXT, + "placementPreviewUrl" TEXT, + "placementPreviewUrlBack" TEXT, + + CONSTRAINT "OrderItem_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "AdminLoginLog" ( + "id" TEXT NOT NULL, + "loginAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "logoutAt" TIMESTAMP(3), + "ipAddress" TEXT, + "userAgent" TEXT, + "success" BOOLEAN NOT NULL DEFAULT true, + + CONSTRAINT "AdminLoginLog_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "CustomerLoginLog" ( + "id" TEXT NOT NULL, + "customerId" TEXT, + "email" TEXT NOT NULL, + "loginAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "ipAddress" TEXT, + "userAgent" TEXT, + "success" BOOLEAN NOT NULL DEFAULT true, + + CONSTRAINT "CustomerLoginLog_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "FinancialAuditLog" ( + "id" TEXT NOT NULL, + "action" TEXT NOT NULL, + "entityType" TEXT NOT NULL, + "entityId" TEXT NOT NULL, + "changes" TEXT NOT NULL, + "amount" INTEGER, + "changedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "changedBy" TEXT, + "reason" TEXT, + + CONSTRAINT "FinancialAuditLog_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "BankStatement" ( + "id" TEXT NOT NULL, + "filename" TEXT NOT NULL, + "bankName" TEXT, + "accountNumber" TEXT, + "statementMonth" TIMESTAMP(3) NOT NULL, + "startDate" TIMESTAMP(3) NOT NULL, + "endDate" TIMESTAMP(3) NOT NULL, + "totalTransactions" INTEGER NOT NULL, + "totalAmount" INTEGER, + "status" TEXT NOT NULL DEFAULT 'PENDING', + "uploadedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "reconciliedAt" TIMESTAMP(3), + + CONSTRAINT "BankStatement_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "BankStatementLine" ( + "id" TEXT NOT NULL, + "statementId" TEXT NOT NULL, + "date" TIMESTAMP(3) NOT NULL, + "description" TEXT NOT NULL, + "amount" INTEGER NOT NULL, + "balance" INTEGER, + "reference" TEXT, + "matched" BOOLEAN NOT NULL DEFAULT false, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "BankStatementLine_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "BankReconciliation" ( + "id" TEXT NOT NULL, + "statementId" TEXT NOT NULL, + "bankLineId" TEXT NOT NULL, + "transactionType" TEXT NOT NULL, + "transactionId" TEXT, + "description" TEXT NOT NULL, + "systemAmount" INTEGER NOT NULL, + "bankAmount" INTEGER NOT NULL, + "amountMatches" BOOLEAN NOT NULL, + "matchedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "matchedBy" TEXT, + "confidence" INTEGER NOT NULL DEFAULT 100, + "notes" TEXT, + + CONSTRAINT "BankReconciliation_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "_ProductToPromotion" ( + "A" TEXT NOT NULL, + "B" TEXT NOT NULL +); + +-- CreateTable +CREATE TABLE "_CollectionToProduct" ( + "A" TEXT NOT NULL, + "B" TEXT NOT NULL +); + +-- CreateIndex +CREATE UNIQUE INDEX "Category_slug_key" ON "Category"("slug"); + +-- CreateIndex +CREATE UNIQUE INDEX "Product_slug_key" ON "Product"("slug"); + +-- CreateIndex +CREATE UNIQUE INDEX "ProductImage_productId_color_key" ON "ProductImage"("productId", "color"); + +-- CreateIndex +CREATE UNIQUE INDEX "StockLevel_productId_color_size_key" ON "StockLevel"("productId", "color", "size"); + +-- CreateIndex +CREATE UNIQUE INDEX "Expense_purchaseId_key" ON "Expense"("purchaseId"); + +-- CreateIndex +CREATE UNIQUE INDEX "Order_stripeSessionId_key" ON "Order"("stripeSessionId"); + +-- CreateIndex +CREATE UNIQUE INDEX "Customer_email_key" ON "Customer"("email"); + +-- CreateIndex +CREATE UNIQUE INDEX "PasswordResetToken_customerId_key" ON "PasswordResetToken"("customerId"); + +-- CreateIndex +CREATE UNIQUE INDEX "PasswordResetToken_token_key" ON "PasswordResetToken"("token"); + +-- CreateIndex +CREATE UNIQUE INDEX "Collection_slug_key" ON "Collection"("slug"); + +-- CreateIndex +CREATE UNIQUE INDEX "MailingListEntry_email_key" ON "MailingListEntry"("email"); + +-- CreateIndex +CREATE INDEX "RateLimitAttempt_key_createdAt_idx" ON "RateLimitAttempt"("key", "createdAt"); + +-- CreateIndex +CREATE UNIQUE INDEX "NewsletterSubscriber_email_key" ON "NewsletterSubscriber"("email"); + +-- CreateIndex +CREATE UNIQUE INDEX "GalleryCategory_slug_key" ON "GalleryCategory"("slug"); + +-- CreateIndex +CREATE UNIQUE INDEX "BankReconciliation_bankLineId_key" ON "BankReconciliation"("bankLineId"); + +-- CreateIndex +CREATE UNIQUE INDEX "_ProductToPromotion_AB_unique" ON "_ProductToPromotion"("A", "B"); + +-- CreateIndex +CREATE INDEX "_ProductToPromotion_B_index" ON "_ProductToPromotion"("B"); + +-- CreateIndex +CREATE UNIQUE INDEX "_CollectionToProduct_AB_unique" ON "_CollectionToProduct"("A", "B"); + +-- CreateIndex +CREATE INDEX "_CollectionToProduct_B_index" ON "_CollectionToProduct"("B"); + +-- AddForeignKey +ALTER TABLE "ProductImage" ADD CONSTRAINT "ProductImage_productId_fkey" FOREIGN KEY ("productId") REFERENCES "Product"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "StockLevel" ADD CONSTRAINT "StockLevel_productId_fkey" FOREIGN KEY ("productId") REFERENCES "Product"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "PurchaseItem" ADD CONSTRAINT "PurchaseItem_purchaseId_fkey" FOREIGN KEY ("purchaseId") REFERENCES "Purchase"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "PurchaseItem" ADD CONSTRAINT "PurchaseItem_productId_fkey" FOREIGN KEY ("productId") REFERENCES "Product"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Expense" ADD CONSTRAINT "Expense_purchaseId_fkey" FOREIGN KEY ("purchaseId") REFERENCES "Purchase"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "DesignProof" ADD CONSTRAINT "DesignProof_productId_fkey" FOREIGN KEY ("productId") REFERENCES "Product"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Message" ADD CONSTRAINT "Message_proofId_fkey" FOREIGN KEY ("proofId") REFERENCES "DesignProof"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Order" ADD CONSTRAINT "Order_customerId_fkey" FOREIGN KEY ("customerId") REFERENCES "Customer"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ManualSale" ADD CONSTRAINT "ManualSale_customerId_fkey" FOREIGN KEY ("customerId") REFERENCES "Customer"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ManualSaleItem" ADD CONSTRAINT "ManualSaleItem_saleId_fkey" FOREIGN KEY ("saleId") REFERENCES "ManualSale"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ManualSaleItem" ADD CONSTRAINT "ManualSaleItem_productId_fkey" FOREIGN KEY ("productId") REFERENCES "Product"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "PasswordResetToken" ADD CONSTRAINT "PasswordResetToken_customerId_fkey" FOREIGN KEY ("customerId") REFERENCES "Customer"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "CustomRequest" ADD CONSTRAINT "CustomRequest_customerId_fkey" FOREIGN KEY ("customerId") REFERENCES "Customer"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "CustomRequest" ADD CONSTRAINT "CustomRequest_productId_fkey" FOREIGN KEY ("productId") REFERENCES "Product"("id") ON DELETE RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "GalleryPhoto" ADD CONSTRAINT "GalleryPhoto_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "GalleryCategory"("id") ON DELETE SET NULL 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 RESTRICT ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "BankStatementLine" ADD CONSTRAINT "BankStatementLine_statementId_fkey" FOREIGN KEY ("statementId") REFERENCES "BankStatement"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "BankReconciliation" ADD CONSTRAINT "BankReconciliation_statementId_fkey" FOREIGN KEY ("statementId") REFERENCES "BankStatement"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "BankReconciliation" ADD CONSTRAINT "BankReconciliation_bankLineId_fkey" FOREIGN KEY ("bankLineId") REFERENCES "BankStatementLine"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_ProductToPromotion" ADD CONSTRAINT "_ProductToPromotion_A_fkey" FOREIGN KEY ("A") REFERENCES "Product"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_ProductToPromotion" ADD CONSTRAINT "_ProductToPromotion_B_fkey" FOREIGN KEY ("B") REFERENCES "Promotion"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_CollectionToProduct" ADD CONSTRAINT "_CollectionToProduct_A_fkey" FOREIGN KEY ("A") REFERENCES "Collection"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "_CollectionToProduct" ADD CONSTRAINT "_CollectionToProduct_B_fkey" FOREIGN KEY ("B") REFERENCES "Product"("id") ON DELETE CASCADE ON UPDATE CASCADE; diff --git a/prisma/migrations/migration_lock.toml b/prisma/migrations/migration_lock.toml new file mode 100644 index 0000000..fbffa92 --- /dev/null +++ b/prisma/migrations/migration_lock.toml @@ -0,0 +1,3 @@ +# Please do not edit this file manually +# It should be added in your version-control system (i.e. Git) +provider = "postgresql" \ No newline at end of file diff --git a/prisma/schema.prisma b/prisma/schema.prisma index a98ddef..94ecab1 100644 --- a/prisma/schema.prisma +++ b/prisma/schema.prisma @@ -3,8 +3,7 @@ generator client { } datasource db { - // Swap to "postgresql" for production scale — just change provider + DATABASE_URL. - provider = "sqlite" + provider = "postgresql" url = env("DATABASE_URL") }