|
|
|
|
|
CREATE TYPE "Role" AS ENUM ('Admin', 'User'); |
|
|
|
|
|
|
|
|
CREATE TYPE "OAuthProvider" AS ENUM ('Github', 'Wechat'); |
|
|
|
|
|
|
|
|
CREATE TYPE "OrderStatus" AS ENUM ('Pending', 'Paid', 'Failed', 'Refunded'); |
|
|
|
|
|
|
|
|
CREATE TYPE "OrderType" AS ENUM ('Subscription', 'OneTime'); |
|
|
|
|
|
|
|
|
CREATE TYPE "ChatMessageRole" AS ENUM ('System', 'User', 'Assistant'); |
|
|
|
|
|
|
|
|
CREATE TABLE "Announcement" ( |
|
|
"id" SERIAL NOT NULL, |
|
|
"title" TEXT NOT NULL, |
|
|
"content" TEXT NOT NULL, |
|
|
"createdAt" TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, |
|
|
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, |
|
|
|
|
|
CONSTRAINT "Announcement_pkey" PRIMARY KEY ("id") |
|
|
); |
|
|
|
|
|
|
|
|
CREATE TABLE "Setting" ( |
|
|
"id" SERIAL NOT NULL, |
|
|
"key" TEXT NOT NULL, |
|
|
"value" TEXT NOT NULL, |
|
|
"createdAt" TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, |
|
|
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, |
|
|
|
|
|
CONSTRAINT "Setting_pkey" PRIMARY KEY ("id") |
|
|
); |
|
|
|
|
|
|
|
|
CREATE TABLE "User" ( |
|
|
"id" SERIAL NOT NULL, |
|
|
"role" "Role" NOT NULL DEFAULT 'User', |
|
|
"name" TEXT, |
|
|
"email" TEXT, |
|
|
"phone" TEXT, |
|
|
"password" TEXT, |
|
|
"createdAt" TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, |
|
|
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, |
|
|
"isBlocked" BOOLEAN NOT NULL DEFAULT false, |
|
|
|
|
|
CONSTRAINT "User_pkey" PRIMARY KEY ("id") |
|
|
); |
|
|
|
|
|
|
|
|
CREATE TABLE "OAuth" ( |
|
|
"id" SERIAL NOT NULL, |
|
|
"provider" "OAuthProvider" NOT NULL, |
|
|
"providerId" TEXT NOT NULL, |
|
|
"accessToken" TEXT NOT NULL, |
|
|
"refreshToken" TEXT NOT NULL, |
|
|
"expiredAt" TIMESTAMP(3) NOT NULL, |
|
|
"data" JSONB, |
|
|
"userId" INTEGER NOT NULL, |
|
|
"createdAt" TIMESTAMP(6) NOT NULL DEFAULT CURRENT_TIMESTAMP, |
|
|
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, |
|
|
|
|
|
CONSTRAINT "OAuth_pkey" PRIMARY KEY ("id") |
|
|
); |
|
|
|
|
|
|
|
|
CREATE TABLE "Model" ( |
|
|
"id" SERIAL NOT NULL, |
|
|
"name" TEXT NOT NULL, |
|
|
"price" INTEGER NOT NULL, |
|
|
|
|
|
CONSTRAINT "Model_pkey" PRIMARY KEY ("id") |
|
|
); |
|
|
|
|
|
|
|
|
CREATE TABLE "Product" ( |
|
|
"id" SERIAL NOT NULL, |
|
|
"name" TEXT NOT NULL, |
|
|
"features" TEXT[], |
|
|
"isHidden" BOOLEAN NOT NULL DEFAULT false, |
|
|
"price" INTEGER NOT NULL, |
|
|
"stock" INTEGER NOT NULL DEFAULT -1, |
|
|
"duration" INTEGER NOT NULL, |
|
|
"categoryId" INTEGER, |
|
|
|
|
|
CONSTRAINT "Product_pkey" PRIMARY KEY ("id") |
|
|
); |
|
|
|
|
|
|
|
|
CREATE TABLE "ModelInProduct" ( |
|
|
"times" INTEGER NOT NULL, |
|
|
"duration" INTEGER NOT NULL, |
|
|
"modelId" INTEGER NOT NULL, |
|
|
"productId" INTEGER NOT NULL, |
|
|
|
|
|
CONSTRAINT "ModelInProduct_pkey" PRIMARY KEY ("modelId","productId") |
|
|
); |
|
|
|
|
|
|
|
|
CREATE TABLE "Category" ( |
|
|
"id" SERIAL NOT NULL, |
|
|
"name" TEXT NOT NULL, |
|
|
"isHidden" BOOLEAN NOT NULL DEFAULT false, |
|
|
|
|
|
CONSTRAINT "Category_pkey" PRIMARY KEY ("id") |
|
|
); |
|
|
|
|
|
|
|
|
CREATE TABLE "Order" ( |
|
|
"id" TEXT NOT NULL, |
|
|
"type" "OrderType" NOT NULL, |
|
|
"status" "OrderStatus" NOT NULL DEFAULT 'Pending', |
|
|
"count" INTEGER NOT NULL DEFAULT 1, |
|
|
"amount" INTEGER NOT NULL, |
|
|
"startAt" TIMESTAMP(3), |
|
|
"endAt" TIMESTAMP(3), |
|
|
"isCurrent" BOOLEAN NOT NULL DEFAULT false, |
|
|
"userId" INTEGER NOT NULL, |
|
|
"productId" INTEGER NOT NULL, |
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, |
|
|
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, |
|
|
"rawData" JSONB, |
|
|
|
|
|
CONSTRAINT "Order_pkey" PRIMARY KEY ("id") |
|
|
); |
|
|
|
|
|
|
|
|
CREATE TABLE "OpenAIKey" ( |
|
|
"key" TEXT NOT NULL, |
|
|
"weight" INTEGER NOT NULL DEFAULT 1, |
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, |
|
|
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, |
|
|
|
|
|
CONSTRAINT "OpenAIKey_pkey" PRIMARY KEY ("key") |
|
|
); |
|
|
|
|
|
|
|
|
CREATE TABLE "RateLimit" ( |
|
|
"key" TEXT NOT NULL, |
|
|
"value" INTEGER[], |
|
|
|
|
|
CONSTRAINT "RateLimit_pkey" PRIMARY KEY ("key") |
|
|
); |
|
|
|
|
|
|
|
|
CREATE TABLE "ChatSession" ( |
|
|
"id" TEXT NOT NULL, |
|
|
"topic" TEXT, |
|
|
"lastSummarizeIndex" INTEGER, |
|
|
"memoryPrompt" TEXT, |
|
|
"userId" INTEGER NOT NULL, |
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, |
|
|
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, |
|
|
|
|
|
CONSTRAINT "ChatSession_pkey" PRIMARY KEY ("id") |
|
|
); |
|
|
|
|
|
|
|
|
CREATE TABLE "ChatMessage" ( |
|
|
"id" TEXT NOT NULL, |
|
|
"role" "ChatMessageRole" NOT NULL, |
|
|
"content" TEXT NOT NULL, |
|
|
"token" INTEGER, |
|
|
"deleted" BOOLEAN NOT NULL DEFAULT false, |
|
|
"chatSessionId" TEXT, |
|
|
"modelId" INTEGER, |
|
|
"userId" INTEGER NOT NULL, |
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, |
|
|
"updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, |
|
|
|
|
|
CONSTRAINT "ChatMessage_pkey" PRIMARY KEY ("id") |
|
|
); |
|
|
|
|
|
|
|
|
CREATE TABLE "ChatSetting" ( |
|
|
"userId" INTEGER NOT NULL, |
|
|
"historyMessageCount" INTEGER, |
|
|
"submitKey" TEXT, |
|
|
"tightBorder" BOOLEAN NOT NULL DEFAULT false, |
|
|
"defalutModelId" INTEGER, |
|
|
"temperature" DOUBLE PRECISION, |
|
|
"maxTokens" INTEGER, |
|
|
"presencePenalty" DOUBLE PRECISION, |
|
|
|
|
|
CONSTRAINT "ChatSetting_pkey" PRIMARY KEY ("userId") |
|
|
); |
|
|
|
|
|
|
|
|
CREATE UNIQUE INDEX "Setting_key_key" ON "Setting"("key"); |
|
|
|
|
|
|
|
|
CREATE UNIQUE INDEX "User_name_key" ON "User"("name"); |
|
|
|
|
|
|
|
|
CREATE UNIQUE INDEX "User_email_key" ON "User"("email"); |
|
|
|
|
|
|
|
|
CREATE UNIQUE INDEX "User_phone_key" ON "User"("phone"); |
|
|
|
|
|
|
|
|
CREATE UNIQUE INDEX "OAuth_provider_providerId_key" ON "OAuth"("provider", "providerId"); |
|
|
|
|
|
|
|
|
CREATE UNIQUE INDEX "Model_name_key" ON "Model"("name"); |
|
|
|
|
|
|
|
|
CREATE UNIQUE INDEX "Model_id_name_key" ON "Model"("id", "name"); |
|
|
|
|
|
|
|
|
CREATE UNIQUE INDEX "Product_name_key" ON "Product"("name"); |
|
|
|
|
|
|
|
|
CREATE UNIQUE INDEX "Category_name_key" ON "Category"("name"); |
|
|
|
|
|
|
|
|
CREATE UNIQUE INDEX "Order_id_key" ON "Order"("id"); |
|
|
|
|
|
|
|
|
ALTER TABLE "OAuth" ADD CONSTRAINT "OAuth_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; |
|
|
|
|
|
|
|
|
ALTER TABLE "Product" ADD CONSTRAINT "Product_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "Category"("id") ON DELETE SET NULL ON UPDATE CASCADE; |
|
|
|
|
|
|
|
|
ALTER TABLE "ModelInProduct" ADD CONSTRAINT "ModelInProduct_modelId_fkey" FOREIGN KEY ("modelId") REFERENCES "Model"("id") ON DELETE RESTRICT ON UPDATE CASCADE; |
|
|
|
|
|
|
|
|
ALTER TABLE "ModelInProduct" ADD CONSTRAINT "ModelInProduct_productId_fkey" FOREIGN KEY ("productId") REFERENCES "Product"("id") ON DELETE RESTRICT ON UPDATE CASCADE; |
|
|
|
|
|
|
|
|
ALTER TABLE "Order" ADD CONSTRAINT "Order_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; |
|
|
|
|
|
|
|
|
ALTER TABLE "Order" ADD CONSTRAINT "Order_productId_fkey" FOREIGN KEY ("productId") REFERENCES "Product"("id") ON DELETE RESTRICT ON UPDATE CASCADE; |
|
|
|
|
|
|
|
|
ALTER TABLE "ChatSession" ADD CONSTRAINT "ChatSession_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; |
|
|
|
|
|
|
|
|
ALTER TABLE "ChatMessage" ADD CONSTRAINT "ChatMessage_chatSessionId_fkey" FOREIGN KEY ("chatSessionId") REFERENCES "ChatSession"("id") ON DELETE SET NULL ON UPDATE CASCADE; |
|
|
|
|
|
|
|
|
ALTER TABLE "ChatMessage" ADD CONSTRAINT "ChatMessage_modelId_fkey" FOREIGN KEY ("modelId") REFERENCES "Model"("id") ON DELETE SET NULL ON UPDATE CASCADE; |
|
|
|
|
|
|
|
|
ALTER TABLE "ChatMessage" ADD CONSTRAINT "ChatMessage_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; |
|
|
|
|
|
|