feat(backend): Day 5 - backend basic architecture setup completed
This commit is contained in:
203
backend/prisma/migrations/20251010075003_init/migration.sql
Normal file
203
backend/prisma/migrations/20251010075003_init/migration.sql
Normal file
@@ -0,0 +1,203 @@
|
||||
-- CreateTable
|
||||
CREATE TABLE "users" (
|
||||
"id" TEXT NOT NULL,
|
||||
"email" TEXT NOT NULL,
|
||||
"password" TEXT NOT NULL,
|
||||
"name" TEXT,
|
||||
"avatar_url" TEXT,
|
||||
"role" TEXT NOT NULL DEFAULT 'user',
|
||||
"status" TEXT NOT NULL DEFAULT 'active',
|
||||
"kb_quota" INTEGER NOT NULL DEFAULT 3,
|
||||
"kb_used" INTEGER NOT NULL DEFAULT 0,
|
||||
"trial_ends_at" TIMESTAMP(3),
|
||||
"is_trial" BOOLEAN NOT NULL DEFAULT true,
|
||||
"last_login_at" TIMESTAMP(3),
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "users_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "projects" (
|
||||
"id" TEXT NOT NULL,
|
||||
"user_id" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"description" TEXT NOT NULL,
|
||||
"conversation_count" INTEGER NOT NULL DEFAULT 0,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "projects_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "conversations" (
|
||||
"id" TEXT NOT NULL,
|
||||
"user_id" TEXT NOT NULL,
|
||||
"project_id" TEXT,
|
||||
"agent_id" TEXT NOT NULL,
|
||||
"title" TEXT NOT NULL,
|
||||
"model_name" TEXT NOT NULL DEFAULT 'deepseek-v3',
|
||||
"message_count" INTEGER NOT NULL DEFAULT 0,
|
||||
"total_tokens" INTEGER NOT NULL DEFAULT 0,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "conversations_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "messages" (
|
||||
"id" TEXT NOT NULL,
|
||||
"conversation_id" TEXT NOT NULL,
|
||||
"role" TEXT NOT NULL,
|
||||
"content" TEXT NOT NULL,
|
||||
"metadata" JSONB,
|
||||
"tokens" INTEGER,
|
||||
"is_pinned" BOOLEAN NOT NULL DEFAULT false,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "messages_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "knowledge_bases" (
|
||||
"id" TEXT NOT NULL,
|
||||
"user_id" TEXT NOT NULL,
|
||||
"name" TEXT NOT NULL,
|
||||
"description" TEXT,
|
||||
"dify_dataset_id" TEXT NOT NULL,
|
||||
"file_count" INTEGER NOT NULL DEFAULT 0,
|
||||
"total_size_bytes" BIGINT NOT NULL DEFAULT 0,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"updated_at" TIMESTAMP(3) NOT NULL,
|
||||
|
||||
CONSTRAINT "knowledge_bases_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "documents" (
|
||||
"id" TEXT NOT NULL,
|
||||
"kb_id" TEXT NOT NULL,
|
||||
"user_id" TEXT NOT NULL,
|
||||
"filename" TEXT NOT NULL,
|
||||
"file_type" TEXT NOT NULL,
|
||||
"file_size_bytes" BIGINT NOT NULL,
|
||||
"file_url" TEXT NOT NULL,
|
||||
"dify_document_id" TEXT NOT NULL,
|
||||
"status" TEXT NOT NULL DEFAULT 'uploading',
|
||||
"progress" INTEGER NOT NULL DEFAULT 0,
|
||||
"error_message" TEXT,
|
||||
"segments_count" INTEGER,
|
||||
"tokens_count" INTEGER,
|
||||
"uploaded_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
"processed_at" TIMESTAMP(3),
|
||||
|
||||
CONSTRAINT "documents_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateTable
|
||||
CREATE TABLE "admin_logs" (
|
||||
"id" SERIAL NOT NULL,
|
||||
"admin_id" TEXT NOT NULL,
|
||||
"action" TEXT NOT NULL,
|
||||
"resource_type" TEXT,
|
||||
"resource_id" TEXT,
|
||||
"details" JSONB,
|
||||
"ip_address" TEXT,
|
||||
"user_agent" TEXT,
|
||||
"created_at" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
||||
|
||||
CONSTRAINT "admin_logs_pkey" PRIMARY KEY ("id")
|
||||
);
|
||||
|
||||
-- CreateIndex
|
||||
CREATE UNIQUE INDEX "users_email_key" ON "users"("email");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "users_email_idx" ON "users"("email");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "users_status_idx" ON "users"("status");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "users_created_at_idx" ON "users"("created_at");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "projects_user_id_idx" ON "projects"("user_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "projects_created_at_idx" ON "projects"("created_at");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "conversations_user_id_idx" ON "conversations"("user_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "conversations_project_id_idx" ON "conversations"("project_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "conversations_agent_id_idx" ON "conversations"("agent_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "conversations_created_at_idx" ON "conversations"("created_at");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "messages_conversation_id_idx" ON "messages"("conversation_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "messages_created_at_idx" ON "messages"("created_at");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "messages_is_pinned_idx" ON "messages"("is_pinned");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "knowledge_bases_user_id_idx" ON "knowledge_bases"("user_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "knowledge_bases_dify_dataset_id_idx" ON "knowledge_bases"("dify_dataset_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "documents_kb_id_idx" ON "documents"("kb_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "documents_user_id_idx" ON "documents"("user_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "documents_status_idx" ON "documents"("status");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "documents_dify_document_id_idx" ON "documents"("dify_document_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "admin_logs_admin_id_idx" ON "admin_logs"("admin_id");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "admin_logs_created_at_idx" ON "admin_logs"("created_at");
|
||||
|
||||
-- CreateIndex
|
||||
CREATE INDEX "admin_logs_action_idx" ON "admin_logs"("action");
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "projects" ADD CONSTRAINT "projects_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "conversations" ADD CONSTRAINT "conversations_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "conversations" ADD CONSTRAINT "conversations_project_id_fkey" FOREIGN KEY ("project_id") REFERENCES "projects"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "messages" ADD CONSTRAINT "messages_conversation_id_fkey" FOREIGN KEY ("conversation_id") REFERENCES "conversations"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "knowledge_bases" ADD CONSTRAINT "knowledge_bases_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "documents" ADD CONSTRAINT "documents_kb_id_fkey" FOREIGN KEY ("kb_id") REFERENCES "knowledge_bases"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "documents" ADD CONSTRAINT "documents_user_id_fkey" FOREIGN KEY ("user_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
|
||||
-- AddForeignKey
|
||||
ALTER TABLE "admin_logs" ADD CONSTRAINT "admin_logs_admin_id_fkey" FOREIGN KEY ("admin_id") REFERENCES "users"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|
||||
Reference in New Issue
Block a user