feat(db): add initial Prisma migration and seed script
- Add init migration with all 23 models including PostGIS - Add seed script for districts, plans, and sample data Co-Authored-By: Paperclip <noreply@paperclip.ing>
This commit is contained in:
468
prisma/migrations/20260407165528_init/migration.sql
Normal file
468
prisma/migrations/20260407165528_init/migration.sql
Normal file
@@ -0,0 +1,468 @@
|
||||
-- CreateExtension
|
||||
CREATE EXTENSION IF NOT EXISTS "postgis";
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "UserRole" AS ENUM ('BUYER', 'SELLER', 'AGENT', 'ADMIN');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "KYCStatus" AS ENUM ('NONE', 'PENDING', 'VERIFIED', 'REJECTED');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "PropertyType" AS ENUM ('APARTMENT', 'VILLA', 'TOWNHOUSE', 'LAND', 'OFFICE', 'SHOPHOUSE');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "TransactionType" AS ENUM ('SALE', 'RENT');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "ListingStatus" AS ENUM ('DRAFT', 'PENDING_REVIEW', 'ACTIVE', 'RESERVED', 'SOLD', 'RENTED', 'EXPIRED', 'REJECTED');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "Direction" AS ENUM ('NORTH', 'SOUTH', 'EAST', 'WEST', 'NORTHEAST', 'NORTHWEST', 'SOUTHEAST', 'SOUTHWEST');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "TransactionStatus" AS ENUM ('INQUIRY', 'VIEWING_SCHEDULED', 'OFFER_MADE', 'DEPOSIT_PAID', 'CONTRACT_SIGNING', 'COMPLETED', 'CANCELLED');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "PaymentProvider" AS ENUM ('VNPAY', 'MOMO', 'ZALOPAY', 'BANK_TRANSFER');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "PaymentStatus" AS ENUM ('PENDING', 'PROCESSING', 'COMPLETED', 'FAILED', 'REFUNDED');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "PaymentType" AS ENUM ('SUBSCRIPTION', 'LISTING_FEE', 'DEPOSIT', 'FEATURED_LISTING');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "PlanTier" AS ENUM ('FREE', 'AGENT_PRO', 'INVESTOR', 'ENTERPRISE');
|
||||
|
||||
-- CreateEnum
|
||||
CREATE TYPE "SubscriptionStatus" AS ENUM ('ACTIVE', 'PAST_DUE', 'CANCELLED', 'EXPIRED');
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "User" (
|
||||
"id" TEXT NOT NULL,
|
||||
"email" TEXT,
|
||||
"phone" TEXT NOT NULL,
|
||||
"passwordHash" TEXT,
|
||||
"fullName" TEXT NOT NULL,
|
||||
"avatarUrl" TEXT,
|
||||
"role" "UserRole" NOT NULL DEFAULT 'BUYER',
|
||||
"kycStatus" "KYCStatus" NOT NULL DEFAULT 'NONE',
|
||||
"kycData" JSONB,
|
||||
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Agent" (
|
||||
"id" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"licenseNumber" TEXT,
|
||||
"agency" TEXT,
|
||||
"qualityScore" DOUBLE PRECISION NOT NULL DEFAULT 0,
|
||||
"totalDeals" INTEGER NOT NULL DEFAULT 0,
|
||||
"responseTimeAvg" INTEGER,
|
||||
"bio" TEXT,
|
||||
"serviceAreas" JSONB NOT NULL,
|
||||
"isVerified" BOOLEAN NOT NULL DEFAULT false,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "Agent_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Property" (
|
||||
"id" TEXT NOT NULL,
|
||||
"propertyType" "PropertyType" NOT NULL,
|
||||
"title" TEXT NOT NULL,
|
||||
"description" TEXT NOT NULL,
|
||||
"address" TEXT NOT NULL,
|
||||
"ward" TEXT NOT NULL,
|
||||
"district" TEXT NOT NULL,
|
||||
"city" TEXT NOT NULL,
|
||||
"location" geometry(Point, 4326) NOT NULL,
|
||||
"areaM2" DOUBLE PRECISION NOT NULL,
|
||||
"usableAreaM2" DOUBLE PRECISION,
|
||||
"bedrooms" INTEGER,
|
||||
"bathrooms" INTEGER,
|
||||
"floors" INTEGER,
|
||||
"floor" INTEGER,
|
||||
"totalFloors" INTEGER,
|
||||
"direction" "Direction",
|
||||
"yearBuilt" INTEGER,
|
||||
"legalStatus" TEXT,
|
||||
"amenities" JSONB,
|
||||
"nearbyPOIs" JSONB,
|
||||
"metroDistanceM" DOUBLE PRECISION,
|
||||
"projectName" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "Property_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "PropertyMedia" (
|
||||
"id" TEXT NOT NULL,
|
||||
"propertyId" TEXT NOT NULL,
|
||||
"url" TEXT NOT NULL,
|
||||
"type" TEXT NOT NULL,
|
||||
"order" INTEGER NOT NULL DEFAULT 0,
|
||||
"caption" TEXT,
|
||||
"aiTags" JSONB,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "PropertyMedia_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Listing" (
|
||||
"id" TEXT NOT NULL,
|
||||
"propertyId" TEXT NOT NULL,
|
||||
"agentId" TEXT,
|
||||
"sellerId" TEXT NOT NULL,
|
||||
"transactionType" "TransactionType" NOT NULL,
|
||||
"status" "ListingStatus" NOT NULL DEFAULT 'DRAFT',
|
||||
"priceVND" BIGINT NOT NULL,
|
||||
"pricePerM2" DOUBLE PRECISION,
|
||||
"rentPriceMonthly" BIGINT,
|
||||
"commissionPct" DOUBLE PRECISION DEFAULT 2.0,
|
||||
"aiPriceEstimate" BIGINT,
|
||||
"aiConfidence" DOUBLE PRECISION,
|
||||
"moderationScore" DOUBLE PRECISION,
|
||||
"moderationNotes" TEXT,
|
||||
"viewCount" INTEGER NOT NULL DEFAULT 0,
|
||||
"saveCount" INTEGER NOT NULL DEFAULT 0,
|
||||
"inquiryCount" INTEGER NOT NULL DEFAULT 0,
|
||||
"featuredUntil" TIMESTAMP(3),
|
||||
"expiresAt" TIMESTAMP(3),
|
||||
"publishedAt" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "Listing_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "SavedSearch" (
|
||||
"id" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"filters" JSONB NOT NULL,
|
||||
"alertEnabled" BOOLEAN NOT NULL DEFAULT true,
|
||||
"lastAlertAt" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "SavedSearch_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Transaction" (
|
||||
"id" TEXT NOT NULL,
|
||||
"listingId" TEXT NOT NULL,
|
||||
"buyerId" TEXT NOT NULL,
|
||||
"status" "TransactionStatus" NOT NULL DEFAULT 'INQUIRY',
|
||||
"agreedPrice" BIGINT,
|
||||
"depositAmount" BIGINT,
|
||||
"timeline" JSONB,
|
||||
"contractUrl" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "Transaction_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Inquiry" (
|
||||
"id" TEXT NOT NULL,
|
||||
"listingId" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"message" TEXT NOT NULL,
|
||||
"phone" TEXT,
|
||||
"isRead" BOOLEAN NOT NULL DEFAULT false,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "Inquiry_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Lead" (
|
||||
"id" TEXT NOT NULL,
|
||||
"agentId" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"phone" TEXT NOT NULL,
|
||||
"email" TEXT,
|
||||
"source" TEXT NOT NULL,
|
||||
"score" DOUBLE PRECISION,
|
||||
"notes" JSONB,
|
||||
"status" TEXT NOT NULL DEFAULT 'new',
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "Lead_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Payment" (
|
||||
"id" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"transactionId" TEXT,
|
||||
"provider" "PaymentProvider" NOT NULL,
|
||||
"type" "PaymentType" NOT NULL,
|
||||
"amountVND" BIGINT NOT NULL,
|
||||
"status" "PaymentStatus" NOT NULL DEFAULT 'PENDING',
|
||||
"providerTxId" TEXT,
|
||||
"callbackData" JSONB,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "Payment_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Plan" (
|
||||
"id" TEXT NOT NULL,
|
||||
"tier" "PlanTier" NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"priceMonthlyVND" BIGINT NOT NULL,
|
||||
"priceYearlyVND" BIGINT NOT NULL,
|
||||
"maxListings" INTEGER,
|
||||
"maxSavedSearches" INTEGER,
|
||||
"features" JSONB NOT NULL,
|
||||
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
||||
|
||||
CONSTRAINT "Plan_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Subscription" (
|
||||
"id" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"planId" TEXT NOT NULL,
|
||||
"status" "SubscriptionStatus" NOT NULL DEFAULT 'ACTIVE',
|
||||
"currentPeriodStart" TIMESTAMP(3) NOT NULL,
|
||||
"currentPeriodEnd" TIMESTAMP(3) NOT NULL,
|
||||
"cancelledAt" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "Subscription_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "UsageRecord" (
|
||||
"id" TEXT NOT NULL,
|
||||
"subscriptionId" TEXT NOT NULL,
|
||||
"metric" TEXT NOT NULL,
|
||||
"count" INTEGER NOT NULL,
|
||||
"periodStart" TIMESTAMP(3) NOT NULL,
|
||||
"periodEnd" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "UsageRecord_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Valuation" (
|
||||
"id" TEXT NOT NULL,
|
||||
"propertyId" TEXT NOT NULL,
|
||||
"estimatedPrice" BIGINT NOT NULL,
|
||||
"confidence" DOUBLE PRECISION NOT NULL,
|
||||
"pricePerM2" DOUBLE PRECISION NOT NULL,
|
||||
"comparables" JSONB NOT NULL,
|
||||
"features" JSONB NOT NULL,
|
||||
"modelVersion" TEXT NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "Valuation_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "MarketIndex" (
|
||||
"id" TEXT NOT NULL,
|
||||
"district" TEXT NOT NULL,
|
||||
"city" TEXT NOT NULL,
|
||||
"propertyType" "PropertyType" NOT NULL,
|
||||
"period" TEXT NOT NULL,
|
||||
"medianPrice" BIGINT NOT NULL,
|
||||
"avgPriceM2" DOUBLE PRECISION NOT NULL,
|
||||
"totalListings" INTEGER NOT NULL,
|
||||
"daysOnMarket" DOUBLE PRECISION NOT NULL,
|
||||
"inventoryLevel" INTEGER NOT NULL,
|
||||
"absorptionRate" DOUBLE PRECISION,
|
||||
"yoyChange" DOUBLE PRECISION,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "MarketIndex_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "Review" (
|
||||
"id" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"targetType" TEXT NOT NULL,
|
||||
"targetId" TEXT NOT NULL,
|
||||
"rating" INTEGER NOT NULL,
|
||||
"comment" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "Review_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "User_phone_key" ON "User"("phone");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "User_phone_idx" ON "User"("phone");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "User_role_idx" ON "User"("role");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Agent_userId_key" ON "Agent"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Agent_qualityScore_idx" ON "Agent"("qualityScore");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Agent_isVerified_idx" ON "Agent"("isVerified");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Property_propertyType_idx" ON "Property"("propertyType");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Property_district_city_idx" ON "Property"("district", "city");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Property_location_idx" ON "Property" USING GIST ("location");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "PropertyMedia_propertyId_idx" ON "PropertyMedia"("propertyId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Listing_status_idx" ON "Listing"("status");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Listing_transactionType_idx" ON "Listing"("transactionType");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Listing_priceVND_idx" ON "Listing"("priceVND");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Listing_agentId_idx" ON "Listing"("agentId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Listing_publishedAt_idx" ON "Listing"("publishedAt");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "SavedSearch_userId_idx" ON "SavedSearch"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Transaction_listingId_idx" ON "Transaction"("listingId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Transaction_buyerId_idx" ON "Transaction"("buyerId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Transaction_status_idx" ON "Transaction"("status");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Inquiry_listingId_idx" ON "Inquiry"("listingId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Inquiry_userId_idx" ON "Inquiry"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Lead_agentId_idx" ON "Lead"("agentId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Lead_status_idx" ON "Lead"("status");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Payment_userId_idx" ON "Payment"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Payment_status_idx" ON "Payment"("status");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Payment_providerTxId_idx" ON "Payment"("providerTxId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Plan_tier_key" ON "Plan"("tier");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "Subscription_userId_key" ON "Subscription"("userId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Subscription_status_idx" ON "Subscription"("status");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "UsageRecord_subscriptionId_metric_idx" ON "UsageRecord"("subscriptionId", "metric");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Valuation_propertyId_idx" ON "Valuation"("propertyId");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "MarketIndex_city_period_idx" ON "MarketIndex"("city", "period");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "MarketIndex_district_city_propertyType_period_key" ON "MarketIndex"("district", "city", "propertyType", "period");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "Review_targetType_targetId_idx" ON "Review"("targetType", "targetId");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Agent" ADD CONSTRAINT "Agent_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "PropertyMedia" ADD CONSTRAINT "PropertyMedia_propertyId_fkey" FOREIGN KEY ("propertyId") REFERENCES "Property"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Listing" ADD CONSTRAINT "Listing_propertyId_fkey" FOREIGN KEY ("propertyId") REFERENCES "Property"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Listing" ADD CONSTRAINT "Listing_agentId_fkey" FOREIGN KEY ("agentId") REFERENCES "Agent"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Listing" ADD CONSTRAINT "Listing_sellerId_fkey" FOREIGN KEY ("sellerId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "SavedSearch" ADD CONSTRAINT "SavedSearch_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Transaction" ADD CONSTRAINT "Transaction_listingId_fkey" FOREIGN KEY ("listingId") REFERENCES "Listing"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Inquiry" ADD CONSTRAINT "Inquiry_listingId_fkey" FOREIGN KEY ("listingId") REFERENCES "Listing"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Inquiry" ADD CONSTRAINT "Inquiry_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Lead" ADD CONSTRAINT "Lead_agentId_fkey" FOREIGN KEY ("agentId") REFERENCES "Agent"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Payment" ADD CONSTRAINT "Payment_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Payment" ADD CONSTRAINT "Payment_transactionId_fkey" FOREIGN KEY ("transactionId") REFERENCES "Transaction"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Subscription" ADD CONSTRAINT "Subscription_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Subscription" ADD CONSTRAINT "Subscription_planId_fkey" FOREIGN KEY ("planId") REFERENCES "Plan"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "UsageRecord" ADD CONSTRAINT "UsageRecord_subscriptionId_fkey" FOREIGN KEY ("subscriptionId") REFERENCES "Subscription"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Valuation" ADD CONSTRAINT "Valuation_propertyId_fkey" FOREIGN KEY ("propertyId") REFERENCES "Property"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "Review" ADD CONSTRAINT "Review_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
||||
3
prisma/migrations/migration_lock.toml
Normal file
3
prisma/migrations/migration_lock.toml
Normal file
@@ -0,0 +1,3 @@
|
||||
# Please do not edit this file manually
|
||||
# It should be added in your version-control system (e.g., Git)
|
||||
provider = "postgresql"
|
||||
Reference in New Issue
Block a user