From 896115a438ed3c5a66d642f47b92f041e5a697c5 Mon Sep 17 00:00:00 2001 From: YANG JIANKUAN Date: Thu, 2 Apr 2026 11:44:45 +0800 Subject: [PATCH] chore: add initial database migration --- .../20260402034440_init/migration.sql | 110 ++++++++++++++++++ prisma/migrations/migration_lock.toml | 3 + 2 files changed, 113 insertions(+) create mode 100644 prisma/migrations/20260402034440_init/migration.sql create mode 100644 prisma/migrations/migration_lock.toml diff --git a/prisma/migrations/20260402034440_init/migration.sql b/prisma/migrations/20260402034440_init/migration.sql new file mode 100644 index 0000000..bc99c8a --- /dev/null +++ b/prisma/migrations/20260402034440_init/migration.sql @@ -0,0 +1,110 @@ +-- CreateEnum +CREATE TYPE "ModuleSource" AS ENUM ('tag', 'path_prefix', 'manual'); + +-- CreateTable +CREATE TABLE "User" ( + "id" TEXT NOT NULL, + "email" TEXT NOT NULL, + "passwordHash" TEXT, + "name" TEXT NOT NULL, + "avatarUrl" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "User_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "OAuthAccount" ( + "id" TEXT NOT NULL, + "userId" TEXT NOT NULL, + "provider" TEXT NOT NULL, + "providerAccountId" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "OAuthAccount_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Project" ( + "id" TEXT NOT NULL, + "userId" TEXT NOT NULL, + "name" TEXT NOT NULL, + "description" TEXT, + "baseUrl" TEXT, + "openApiSpec" JSONB NOT NULL, + "openApiVersion" TEXT NOT NULL, + "apiKeyHash" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Project_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Module" ( + "id" TEXT NOT NULL, + "projectId" TEXT NOT NULL, + "name" TEXT NOT NULL, + "description" TEXT, + "sortOrder" INTEGER NOT NULL DEFAULT 0, + "source" "ModuleSource" NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Module_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Endpoint" ( + "id" TEXT NOT NULL, + "projectId" TEXT NOT NULL, + "moduleId" TEXT NOT NULL, + "method" TEXT NOT NULL, + "path" TEXT NOT NULL, + "summary" TEXT, + "description" TEXT, + "operationId" TEXT, + "parameters" JSONB NOT NULL DEFAULT '[]', + "requestBody" JSONB, + "responses" JSONB NOT NULL DEFAULT '{}', + "tags" TEXT[] DEFAULT ARRAY[]::TEXT[], + "deprecated" BOOLEAN NOT NULL DEFAULT false, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Endpoint_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "User_email_key" ON "User"("email"); + +-- CreateIndex +CREATE UNIQUE INDEX "OAuthAccount_provider_providerAccountId_key" ON "OAuthAccount"("provider", "providerAccountId"); + +-- CreateIndex +CREATE INDEX "Module_projectId_idx" ON "Module"("projectId"); + +-- CreateIndex +CREATE INDEX "Endpoint_projectId_idx" ON "Endpoint"("projectId"); + +-- CreateIndex +CREATE INDEX "Endpoint_moduleId_idx" ON "Endpoint"("moduleId"); + +-- CreateIndex +CREATE INDEX "Endpoint_projectId_moduleId_idx" ON "Endpoint"("projectId", "moduleId"); + +-- AddForeignKey +ALTER TABLE "OAuthAccount" ADD CONSTRAINT "OAuthAccount_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Project" ADD CONSTRAINT "Project_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Module" ADD CONSTRAINT "Module_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Endpoint" ADD CONSTRAINT "Endpoint_projectId_fkey" FOREIGN KEY ("projectId") REFERENCES "Project"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Endpoint" ADD CONSTRAINT "Endpoint_moduleId_fkey" FOREIGN KEY ("moduleId") REFERENCES "Module"("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..044d57c --- /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 (e.g., Git) +provider = "postgresql"