fix: unblock ci audit checks
This commit is contained in:
@@ -2,6 +2,66 @@
|
||||
-- Geometry is `MultiPolygon` (some provinces have offshore islands), centroid is `Point`.
|
||||
-- All columns are nullable to allow incremental backfill from the Overpass sync.
|
||||
|
||||
-- The Prisma schema already contains these models, but the original migration
|
||||
-- only altered tables that do not exist on a fresh database. Create the base
|
||||
-- reference tables first so `migrate deploy` works from an empty CI database.
|
||||
CREATE TABLE IF NOT EXISTS "vn_provinces" (
|
||||
"code" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"nameEn" TEXT,
|
||||
"type" TEXT NOT NULL,
|
||||
"codename" TEXT NOT NULL,
|
||||
"phoneCode" INTEGER,
|
||||
"osmId" BIGINT,
|
||||
"areaKm2" DOUBLE PRECISION,
|
||||
"population" INTEGER,
|
||||
"lastSyncedAt" TIMESTAMP(3),
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT "vn_provinces_pkey" PRIMARY KEY ("code")
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "vn_districts" (
|
||||
"code" TEXT NOT NULL,
|
||||
"provinceCode" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"nameEn" TEXT,
|
||||
"type" TEXT NOT NULL,
|
||||
"codename" TEXT NOT NULL,
|
||||
"osmId" BIGINT,
|
||||
"areaKm2" DOUBLE PRECISION,
|
||||
"population" INTEGER,
|
||||
"lastSyncedAt" TIMESTAMP(3),
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT "vn_districts_pkey" PRIMARY KEY ("code"),
|
||||
CONSTRAINT "vn_districts_provinceCode_fkey"
|
||||
FOREIGN KEY ("provinceCode") REFERENCES "vn_provinces"("code")
|
||||
ON DELETE RESTRICT ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "vn_wards" (
|
||||
"code" TEXT NOT NULL,
|
||||
"districtCode" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"nameEn" TEXT,
|
||||
"type" TEXT NOT NULL,
|
||||
"codename" TEXT NOT NULL,
|
||||
"osmId" BIGINT,
|
||||
"areaKm2" DOUBLE PRECISION,
|
||||
"population" INTEGER,
|
||||
"lastSyncedAt" TIMESTAMP(3),
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
CONSTRAINT "vn_wards_pkey" PRIMARY KEY ("code"),
|
||||
CONSTRAINT "vn_wards_districtCode_fkey"
|
||||
FOREIGN KEY ("districtCode") REFERENCES "vn_districts"("code")
|
||||
ON DELETE RESTRICT ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
CREATE INDEX IF NOT EXISTS "vn_provinces_codename_idx" ON "vn_provinces"("codename");
|
||||
CREATE INDEX IF NOT EXISTS "vn_districts_provinceCode_idx" ON "vn_districts"("provinceCode");
|
||||
CREATE INDEX IF NOT EXISTS "vn_districts_codename_idx" ON "vn_districts"("codename");
|
||||
CREATE INDEX IF NOT EXISTS "vn_wards_districtCode_idx" ON "vn_wards"("districtCode");
|
||||
CREATE INDEX IF NOT EXISTS "vn_wards_codename_idx" ON "vn_wards"("codename");
|
||||
|
||||
-- ── vn_provinces ────────────────────────────────────────────────────────────
|
||||
ALTER TABLE "vn_provinces"
|
||||
ADD COLUMN IF NOT EXISTS "osmId" BIGINT,
|
||||
@@ -10,8 +70,9 @@ ALTER TABLE "vn_provinces"
|
||||
ADD COLUMN IF NOT EXISTS "lastSyncedAt" TIMESTAMP(3),
|
||||
ADD COLUMN IF NOT EXISTS "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP;
|
||||
|
||||
SELECT AddGeometryColumn('public', 'vn_provinces', 'geometry', 4326, 'MULTIPOLYGON', 2);
|
||||
SELECT AddGeometryColumn('public', 'vn_provinces', 'centroid', 4326, 'POINT', 2);
|
||||
ALTER TABLE "vn_provinces"
|
||||
ADD COLUMN IF NOT EXISTS "geometry" geometry(MultiPolygon, 4326),
|
||||
ADD COLUMN IF NOT EXISTS "centroid" geometry(Point, 4326);
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS "vn_provinces_osmId_key" ON "vn_provinces"("osmId") WHERE "osmId" IS NOT NULL;
|
||||
CREATE INDEX IF NOT EXISTS "vn_provinces_geometry_idx" ON "vn_provinces" USING GIST ("geometry");
|
||||
@@ -26,8 +87,9 @@ ALTER TABLE "vn_districts"
|
||||
ADD COLUMN IF NOT EXISTS "lastSyncedAt" TIMESTAMP(3),
|
||||
ADD COLUMN IF NOT EXISTS "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP;
|
||||
|
||||
SELECT AddGeometryColumn('public', 'vn_districts', 'geometry', 4326, 'MULTIPOLYGON', 2);
|
||||
SELECT AddGeometryColumn('public', 'vn_districts', 'centroid', 4326, 'POINT', 2);
|
||||
ALTER TABLE "vn_districts"
|
||||
ADD COLUMN IF NOT EXISTS "geometry" geometry(MultiPolygon, 4326),
|
||||
ADD COLUMN IF NOT EXISTS "centroid" geometry(Point, 4326);
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS "vn_districts_osmId_key" ON "vn_districts"("osmId") WHERE "osmId" IS NOT NULL;
|
||||
CREATE INDEX IF NOT EXISTS "vn_districts_geometry_idx" ON "vn_districts" USING GIST ("geometry");
|
||||
@@ -42,8 +104,9 @@ ALTER TABLE "vn_wards"
|
||||
ADD COLUMN IF NOT EXISTS "lastSyncedAt" TIMESTAMP(3),
|
||||
ADD COLUMN IF NOT EXISTS "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP;
|
||||
|
||||
SELECT AddGeometryColumn('public', 'vn_wards', 'geometry', 4326, 'MULTIPOLYGON', 2);
|
||||
SELECT AddGeometryColumn('public', 'vn_wards', 'centroid', 4326, 'POINT', 2);
|
||||
ALTER TABLE "vn_wards"
|
||||
ADD COLUMN IF NOT EXISTS "geometry" geometry(MultiPolygon, 4326),
|
||||
ADD COLUMN IF NOT EXISTS "centroid" geometry(Point, 4326);
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS "vn_wards_osmId_key" ON "vn_wards"("osmId") WHERE "osmId" IS NOT NULL;
|
||||
CREATE INDEX IF NOT EXISTS "vn_wards_geometry_idx" ON "vn_wards" USING GIST ("geometry");
|
||||
|
||||
@@ -0,0 +1,109 @@
|
||||
-- Align fresh databases with the Order/Escrow models already present in
|
||||
-- prisma/schema.prisma. Seed and E2E depend on these tables.
|
||||
|
||||
ALTER TYPE "PaymentType" ADD VALUE IF NOT EXISTS 'AUCTION_PAYMENT';
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'OrderStatus') THEN
|
||||
CREATE TYPE "OrderStatus" AS ENUM (
|
||||
'CREATED',
|
||||
'PAYMENT_PENDING',
|
||||
'PAYMENT_CONFIRMED',
|
||||
'ESCROW_HELD',
|
||||
'SHIPPED',
|
||||
'DELIVERED',
|
||||
'DISPUTE',
|
||||
'ESCROW_RELEASED',
|
||||
'COMPLETED',
|
||||
'CANCELLED',
|
||||
'REFUNDED'
|
||||
);
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (SELECT 1 FROM pg_type WHERE typname = 'EscrowStatus') THEN
|
||||
CREATE TYPE "EscrowStatus" AS ENUM (
|
||||
'PENDING',
|
||||
'HELD',
|
||||
'RELEASED',
|
||||
'REFUNDED',
|
||||
'DISPUTED'
|
||||
);
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "Order" (
|
||||
"id" TEXT NOT NULL,
|
||||
"buyerId" TEXT NOT NULL,
|
||||
"sellerId" TEXT NOT NULL,
|
||||
"listingId" TEXT NOT NULL,
|
||||
"status" "OrderStatus" NOT NULL DEFAULT 'CREATED',
|
||||
"amountVND" BIGINT NOT NULL,
|
||||
"platformFeeVND" BIGINT NOT NULL,
|
||||
"sellerPayoutVND" BIGINT NOT NULL,
|
||||
"idempotencyKey" TEXT,
|
||||
"metadata" JSONB,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
CONSTRAINT "Order_pkey" PRIMARY KEY ("id"),
|
||||
CONSTRAINT "Order_buyerId_fkey"
|
||||
FOREIGN KEY ("buyerId") REFERENCES "User"("id")
|
||||
ON DELETE RESTRICT ON UPDATE CASCADE,
|
||||
CONSTRAINT "Order_sellerId_fkey"
|
||||
FOREIGN KEY ("sellerId") REFERENCES "User"("id")
|
||||
ON DELETE RESTRICT ON UPDATE CASCADE,
|
||||
CONSTRAINT "Order_listingId_fkey"
|
||||
FOREIGN KEY ("listingId") REFERENCES "Listing"("id")
|
||||
ON DELETE RESTRICT ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS "Order_idempotencyKey_key" ON "Order"("idempotencyKey");
|
||||
CREATE INDEX IF NOT EXISTS "Order_buyerId_idx" ON "Order"("buyerId");
|
||||
CREATE INDEX IF NOT EXISTS "Order_sellerId_idx" ON "Order"("sellerId");
|
||||
CREATE INDEX IF NOT EXISTS "Order_listingId_idx" ON "Order"("listingId");
|
||||
CREATE INDEX IF NOT EXISTS "Order_status_idx" ON "Order"("status");
|
||||
CREATE INDEX IF NOT EXISTS "Order_createdAt_idx" ON "Order"("createdAt" DESC);
|
||||
|
||||
CREATE TABLE IF NOT EXISTS "Escrow" (
|
||||
"id" TEXT NOT NULL,
|
||||
"orderId" TEXT NOT NULL,
|
||||
"amountVND" BIGINT NOT NULL,
|
||||
"feeVND" BIGINT NOT NULL,
|
||||
"status" "EscrowStatus" NOT NULL DEFAULT 'PENDING',
|
||||
"heldAt" TIMESTAMP(3),
|
||||
"releasedAt" TIMESTAMP(3),
|
||||
"disputeReason" TEXT,
|
||||
"disputedAt" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
CONSTRAINT "Escrow_pkey" PRIMARY KEY ("id"),
|
||||
CONSTRAINT "Escrow_orderId_fkey"
|
||||
FOREIGN KEY ("orderId") REFERENCES "Order"("id")
|
||||
ON DELETE RESTRICT ON UPDATE CASCADE
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX IF NOT EXISTS "Escrow_orderId_key" ON "Escrow"("orderId");
|
||||
CREATE INDEX IF NOT EXISTS "Escrow_status_idx" ON "Escrow"("status");
|
||||
CREATE INDEX IF NOT EXISTS "Escrow_orderId_idx" ON "Escrow"("orderId");
|
||||
|
||||
ALTER TABLE "Payment"
|
||||
ADD COLUMN IF NOT EXISTS "orderId" TEXT,
|
||||
ADD COLUMN IF NOT EXISTS "idempotencyKey" TEXT;
|
||||
|
||||
DO $$
|
||||
BEGIN
|
||||
IF NOT EXISTS (
|
||||
SELECT 1 FROM pg_constraint WHERE conname = 'Payment_orderId_fkey'
|
||||
) THEN
|
||||
ALTER TABLE "Payment"
|
||||
ADD CONSTRAINT "Payment_orderId_fkey"
|
||||
FOREIGN KEY ("orderId") REFERENCES "Order"("id")
|
||||
ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
END IF;
|
||||
END $$;
|
||||
|
||||
CREATE INDEX IF NOT EXISTS "Payment_orderId_idx" ON "Payment"("orderId");
|
||||
CREATE INDEX IF NOT EXISTS "Payment_createdAt_idx" ON "Payment"("createdAt");
|
||||
Reference in New Issue
Block a user