chore: initialize WanderQ MiniAPP 2.0 repository
This commit is contained in:
@@ -0,0 +1,19 @@
|
||||
CREATE TABLE "HomeModule" (
|
||||
"id" TEXT NOT NULL,
|
||||
"label" TEXT NOT NULL,
|
||||
"sortOrder" 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 "HomeModule_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
INSERT INTO "HomeModule" ("id", "label", "sortOrder", "isActive", "createdAt", "updatedAt")
|
||||
VALUES
|
||||
('explore', '探索贵州', 0, true, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
|
||||
('themes', '主题甄选', 1, true, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
|
||||
('deals', '特价优惠', 2, true, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
|
||||
('routes', '精选线路', 3, true, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
|
||||
('hotels', '特色酒店', 4, true, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP),
|
||||
('vehicles', '万趣用车', 5, true, CURRENT_TIMESTAMP, CURRENT_TIMESTAMP);
|
||||
@@ -0,0 +1,3 @@
|
||||
ALTER TABLE "Product"
|
||||
ADD COLUMN "keyFacts" JSONB,
|
||||
ADD COLUMN "contentBlocks" JSONB;
|
||||
@@ -0,0 +1,6 @@
|
||||
ALTER TABLE "HomeModule"
|
||||
ADD COLUMN "templateType" TEXT NOT NULL DEFAULT 'explore',
|
||||
ADD COLUMN "content" JSONB,
|
||||
ADD COLUMN "publishedConfig" JSONB,
|
||||
ADD COLUMN "isSystem" BOOLEAN NOT NULL DEFAULT false,
|
||||
ADD COLUMN "isDeleted" BOOLEAN NOT NULL DEFAULT false;
|
||||
@@ -0,0 +1,8 @@
|
||||
CREATE TABLE "DestinationPageConfig" (
|
||||
"id" TEXT NOT NULL,
|
||||
"recommendedProductIds" JSONB NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "DestinationPageConfig_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
@@ -0,0 +1,12 @@
|
||||
CREATE TABLE "SearchPageConfig" (
|
||||
"id" TEXT NOT NULL DEFAULT 'search-page',
|
||||
"title" TEXT NOT NULL,
|
||||
"subtitle" TEXT NOT NULL,
|
||||
"placeholder" TEXT NOT NULL,
|
||||
"popularKeywords" JSONB NOT NULL,
|
||||
"groups" JSONB NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "SearchPageConfig_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
@@ -0,0 +1,17 @@
|
||||
ALTER TABLE "Product"
|
||||
ADD COLUMN "volumeKey" TEXT,
|
||||
ADD COLUMN "durationDays" INTEGER,
|
||||
ADD COLUMN "durationNights" INTEGER,
|
||||
ADD COLUMN "departureDates" TEXT[] NOT NULL DEFAULT ARRAY[]::TEXT[],
|
||||
ADD COLUMN "remainingSpots" INTEGER,
|
||||
ADD COLUMN "recommendation" TEXT;
|
||||
|
||||
ALTER TABLE "Lead"
|
||||
ADD COLUMN "contactName" TEXT,
|
||||
ADD COLUMN "wechat" TEXT,
|
||||
ADD COLUMN "adultCount" INTEGER,
|
||||
ADD COLUMN "childCount" INTEGER,
|
||||
ADD COLUMN "roomType" TEXT,
|
||||
ADD COLUMN "plan" TEXT,
|
||||
ADD COLUMN "addOns" TEXT[] NOT NULL DEFAULT ARRAY[]::TEXT[],
|
||||
ADD COLUMN "sourceTheme" TEXT;
|
||||
@@ -0,0 +1,15 @@
|
||||
ALTER TABLE "SearchPageConfig"
|
||||
ADD COLUMN "modules" JSONB NOT NULL DEFAULT '{}';
|
||||
|
||||
UPDATE "SearchPageConfig"
|
||||
SET "modules" = jsonb_build_object(
|
||||
'seasonalInspiration', jsonb_build_object(
|
||||
'title', "title",
|
||||
'subtitle', "subtitle"
|
||||
),
|
||||
'preferenceDiscovery', jsonb_build_object(
|
||||
'title', '换一种方式找灵感',
|
||||
'subtitle', '按区域、主题和体验偏好,找到下一处想去的地方。'
|
||||
)
|
||||
)
|
||||
WHERE "modules" = '{}'::jsonb;
|
||||
@@ -0,0 +1,76 @@
|
||||
ALTER TABLE "Customer"
|
||||
ALTER COLUMN "phone" DROP NOT NULL;
|
||||
|
||||
CREATE TABLE "MiniProgramUser" (
|
||||
"id" TEXT NOT NULL,
|
||||
"appId" TEXT NOT NULL,
|
||||
"openId" TEXT NOT NULL,
|
||||
"unionId" TEXT,
|
||||
"nickname" TEXT,
|
||||
"avatarUrl" TEXT,
|
||||
"phone" TEXT,
|
||||
"phoneAuthorizedAt" TIMESTAMP(3),
|
||||
"note" TEXT,
|
||||
"source" TEXT NOT NULL DEFAULT 'mini_program',
|
||||
"status" TEXT NOT NULL DEFAULT 'active',
|
||||
"customerId" TEXT,
|
||||
"firstSeenAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"lastLoginAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "MiniProgramUser_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE TABLE "MiniProgramFavorite" (
|
||||
"id" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"productId" TEXT NOT NULL,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "MiniProgramFavorite_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE TABLE "MiniProgramHistory" (
|
||||
"id" TEXT NOT NULL,
|
||||
"userId" TEXT NOT NULL,
|
||||
"productId" TEXT NOT NULL,
|
||||
"viewCount" INTEGER NOT NULL DEFAULT 1,
|
||||
"lastViewedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "MiniProgramHistory_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
ALTER TABLE "Lead"
|
||||
ADD COLUMN "userId" TEXT;
|
||||
|
||||
CREATE UNIQUE INDEX "MiniProgramUser_appId_openId_key" ON "MiniProgramUser"("appId", "openId");
|
||||
CREATE UNIQUE INDEX "MiniProgramUser_customerId_key" ON "MiniProgramUser"("customerId");
|
||||
CREATE INDEX "MiniProgramUser_phone_idx" ON "MiniProgramUser"("phone");
|
||||
CREATE INDEX "MiniProgramUser_status_lastLoginAt_idx" ON "MiniProgramUser"("status", "lastLoginAt");
|
||||
CREATE UNIQUE INDEX "MiniProgramFavorite_userId_productId_key" ON "MiniProgramFavorite"("userId", "productId");
|
||||
CREATE INDEX "MiniProgramFavorite_productId_idx" ON "MiniProgramFavorite"("productId");
|
||||
CREATE UNIQUE INDEX "MiniProgramHistory_userId_productId_key" ON "MiniProgramHistory"("userId", "productId");
|
||||
CREATE INDEX "MiniProgramHistory_userId_lastViewedAt_idx" ON "MiniProgramHistory"("userId", "lastViewedAt");
|
||||
CREATE INDEX "Lead_userId_createdAt_idx" ON "Lead"("userId", "createdAt");
|
||||
CREATE INDEX "Lead_phone_idx" ON "Lead"("phone");
|
||||
|
||||
ALTER TABLE "MiniProgramUser"
|
||||
ADD CONSTRAINT "MiniProgramUser_customerId_fkey"
|
||||
FOREIGN KEY ("customerId") REFERENCES "Customer"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE "MiniProgramFavorite"
|
||||
ADD CONSTRAINT "MiniProgramFavorite_userId_fkey"
|
||||
FOREIGN KEY ("userId") REFERENCES "MiniProgramUser"("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
ADD CONSTRAINT "MiniProgramFavorite_productId_fkey"
|
||||
FOREIGN KEY ("productId") REFERENCES "Product"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE "MiniProgramHistory"
|
||||
ADD CONSTRAINT "MiniProgramHistory_userId_fkey"
|
||||
FOREIGN KEY ("userId") REFERENCES "MiniProgramUser"("id") ON DELETE CASCADE ON UPDATE CASCADE,
|
||||
ADD CONSTRAINT "MiniProgramHistory_productId_fkey"
|
||||
FOREIGN KEY ("productId") REFERENCES "Product"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE "Lead"
|
||||
ADD CONSTRAINT "Lead_userId_fkey"
|
||||
FOREIGN KEY ("userId") REFERENCES "MiniProgramUser"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
@@ -0,0 +1 @@
|
||||
ALTER TABLE "Product" ADD COLUMN "pricingTiers" JSONB;
|
||||
@@ -0,0 +1,2 @@
|
||||
ALTER TABLE "Product"
|
||||
DROP COLUMN "volumeKey";
|
||||
@@ -0,0 +1,12 @@
|
||||
UPDATE "HomeModule"
|
||||
SET
|
||||
"isActive" = false,
|
||||
"isDeleted" = true,
|
||||
"publishedConfig" = CASE
|
||||
WHEN "publishedConfig" IS NULL THEN NULL
|
||||
ELSE jsonb_set(
|
||||
jsonb_set("publishedConfig", '{isActive}', 'false'::jsonb, true),
|
||||
'{isDeleted}', 'true'::jsonb, true
|
||||
)
|
||||
END
|
||||
WHERE "id" = 'routes';
|
||||
@@ -0,0 +1,67 @@
|
||||
ALTER TABLE "Lead"
|
||||
ADD COLUMN "wecomContactId" TEXT;
|
||||
|
||||
CREATE TABLE "WecomContactWay" (
|
||||
"id" TEXT NOT NULL,
|
||||
"configId" TEXT NOT NULL,
|
||||
"type" INTEGER NOT NULL DEFAULT 1,
|
||||
"scene" INTEGER NOT NULL DEFAULT 1,
|
||||
"style" INTEGER NOT NULL DEFAULT 1,
|
||||
"remark" TEXT,
|
||||
"state" TEXT,
|
||||
"wecomUserId" TEXT,
|
||||
"enabled" BOOLEAN NOT NULL DEFAULT true,
|
||||
"lastSyncedAt" TIMESTAMP(3),
|
||||
"lastSyncError" TEXT,
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "WecomContactWay_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE TABLE "WecomExternalContact" (
|
||||
"id" TEXT NOT NULL,
|
||||
"externalUserId" TEXT NOT NULL,
|
||||
"wecomUserId" TEXT NOT NULL,
|
||||
"contactWayId" TEXT,
|
||||
"miniProgramUserId" TEXT,
|
||||
"customerId" TEXT,
|
||||
"name" TEXT,
|
||||
"avatarUrl" TEXT,
|
||||
"type" INTEGER,
|
||||
"gender" INTEGER,
|
||||
"unionId" TEXT,
|
||||
"corpName" TEXT,
|
||||
"position" TEXT,
|
||||
"remark" TEXT,
|
||||
"description" TEXT,
|
||||
"profile" JSONB,
|
||||
"status" TEXT NOT NULL DEFAULT 'active',
|
||||
"addedAt" TIMESTAMP(3),
|
||||
"lastEventAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"deletedAt" TIMESTAMP(3),
|
||||
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updatedAt" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "WecomExternalContact_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
CREATE UNIQUE INDEX "WecomContactWay_configId_key" ON "WecomContactWay"("configId");
|
||||
CREATE UNIQUE INDEX "WecomExternalContact_externalUserId_wecomUserId_key" ON "WecomExternalContact"("externalUserId", "wecomUserId");
|
||||
CREATE INDEX "Lead_wecomContactId_idx" ON "Lead"("wecomContactId");
|
||||
CREATE INDEX "WecomExternalContact_status_lastEventAt_idx" ON "WecomExternalContact"("status", "lastEventAt");
|
||||
CREATE INDEX "WecomExternalContact_miniProgramUserId_idx" ON "WecomExternalContact"("miniProgramUserId");
|
||||
CREATE INDEX "WecomExternalContact_customerId_idx" ON "WecomExternalContact"("customerId");
|
||||
CREATE INDEX "WecomExternalContact_contactWayId_idx" ON "WecomExternalContact"("contactWayId");
|
||||
|
||||
ALTER TABLE "Lead"
|
||||
ADD CONSTRAINT "Lead_wecomContactId_fkey"
|
||||
FOREIGN KEY ("wecomContactId") REFERENCES "WecomExternalContact"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
|
||||
ALTER TABLE "WecomExternalContact"
|
||||
ADD CONSTRAINT "WecomExternalContact_contactWayId_fkey"
|
||||
FOREIGN KEY ("contactWayId") REFERENCES "WecomContactWay"("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
||||
ADD CONSTRAINT "WecomExternalContact_miniProgramUserId_fkey"
|
||||
FOREIGN KEY ("miniProgramUserId") REFERENCES "MiniProgramUser"("id") ON DELETE SET NULL ON UPDATE CASCADE,
|
||||
ADD CONSTRAINT "WecomExternalContact_customerId_fkey"
|
||||
FOREIGN KEY ("customerId") REFERENCES "Customer"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
||||
@@ -0,0 +1,5 @@
|
||||
ALTER TABLE "Lead"
|
||||
ADD COLUMN "requestType" TEXT NOT NULL DEFAULT 'custom';
|
||||
|
||||
CREATE INDEX "Lead_requestType_status_createdAt_idx"
|
||||
ON "Lead"("requestType", "status", "createdAt");
|
||||
@@ -0,0 +1,6 @@
|
||||
ALTER TABLE "Lead"
|
||||
ADD COLUMN "adminNote" TEXT,
|
||||
ADD COLUMN "processed" BOOLEAN NOT NULL DEFAULT false;
|
||||
|
||||
CREATE INDEX "Lead_processed_requestType_createdAt_idx"
|
||||
ON "Lead"("processed", "requestType", "createdAt");
|
||||
3
apps/api/prisma/migrations/migration_lock.toml
Normal file
3
apps/api/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 (i.e. Git)
|
||||
provider = "postgresql"
|
||||
Reference in New Issue
Block a user