From 5b09484270dfed0d843a480b6f1db552a1f24252 Mon Sep 17 00:00:00 2001 From: Peter Maquiran Date: Sat, 18 Apr 2026 08:47:40 +0100 Subject: [PATCH] run migration --- .../20260418072208_init/migration.sql | 189 ++++++++++++++++++ prisma/migrations/migration_lock.toml | 3 + 2 files changed, 192 insertions(+) create mode 100644 prisma/migrations/20260418072208_init/migration.sql create mode 100644 prisma/migrations/migration_lock.toml diff --git a/prisma/migrations/20260418072208_init/migration.sql b/prisma/migrations/20260418072208_init/migration.sql new file mode 100644 index 0000000..47fff32 --- /dev/null +++ b/prisma/migrations/20260418072208_init/migration.sql @@ -0,0 +1,189 @@ +-- CreateEnum +CREATE TYPE "UserRole" AS ENUM ('ADMIN', 'EDITOR', 'AUTHOR', 'READER'); + +-- CreateEnum +CREATE TYPE "ArticleStatus" AS ENUM ('DRAFT', 'PUBLISHED', 'ARCHIVED'); + +-- CreateTable +CREATE TABLE "User" ( + "id" TEXT NOT NULL, + "keycloakId" TEXT NOT NULL, + "email" TEXT NOT NULL, + "displayName" TEXT, + "avatarKey" TEXT, + "role" "UserRole" NOT NULL DEFAULT 'READER', + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "User_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Category" ( + "id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "slug" TEXT NOT NULL, + "parentId" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Category_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Tag" ( + "id" TEXT NOT NULL, + "name" TEXT NOT NULL, + "slug" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Tag_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Article" ( + "id" TEXT NOT NULL, + "title" TEXT NOT NULL, + "slug" TEXT NOT NULL, + "content" TEXT NOT NULL, + "excerpt" TEXT, + "status" "ArticleStatus" NOT NULL DEFAULT 'DRAFT', + "publishedAt" TIMESTAMP(3), + "authorId" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Article_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ArticleCategory" ( + "articleId" TEXT NOT NULL, + "categoryId" TEXT NOT NULL, + + CONSTRAINT "ArticleCategory_pkey" PRIMARY KEY ("articleId","categoryId") +); + +-- CreateTable +CREATE TABLE "ArticleTag" ( + "articleId" TEXT NOT NULL, + "tagId" TEXT NOT NULL, + + CONSTRAINT "ArticleTag_pkey" PRIMARY KEY ("articleId","tagId") +); + +-- CreateTable +CREATE TABLE "Image" ( + "id" TEXT NOT NULL, + "fileKey" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "Image_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "ArticleImage" ( + "articleId" TEXT NOT NULL, + "imageId" TEXT NOT NULL, + "sortOrder" INTEGER NOT NULL DEFAULT 0, + + CONSTRAINT "ArticleImage_pkey" PRIMARY KEY ("articleId","imageId") +); + +-- CreateTable +CREATE TABLE "Comment" ( + "id" TEXT NOT NULL, + "content" TEXT NOT NULL, + "articleId" TEXT NOT NULL, + "userId" TEXT NOT NULL, + "parentId" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "Comment_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "Bookmark" ( + "userId" TEXT NOT NULL, + "articleId" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "Bookmark_pkey" PRIMARY KEY ("userId","articleId") +); + +-- CreateIndex +CREATE UNIQUE INDEX "User_keycloakId_key" ON "User"("keycloakId"); + +-- CreateIndex +CREATE UNIQUE INDEX "User_email_key" ON "User"("email"); + +-- CreateIndex +CREATE UNIQUE INDEX "Category_slug_key" ON "Category"("slug"); + +-- CreateIndex +CREATE INDEX "Category_parentId_idx" ON "Category"("parentId"); + +-- CreateIndex +CREATE UNIQUE INDEX "Tag_slug_key" ON "Tag"("slug"); + +-- CreateIndex +CREATE UNIQUE INDEX "Article_slug_key" ON "Article"("slug"); + +-- CreateIndex +CREATE INDEX "Article_status_publishedAt_idx" ON "Article"("status", "publishedAt"); + +-- CreateIndex +CREATE INDEX "Article_authorId_idx" ON "Article"("authorId"); + +-- CreateIndex +CREATE UNIQUE INDEX "Image_fileKey_key" ON "Image"("fileKey"); + +-- CreateIndex +CREATE INDEX "ArticleImage_articleId_sortOrder_idx" ON "ArticleImage"("articleId", "sortOrder"); + +-- CreateIndex +CREATE INDEX "Comment_articleId_idx" ON "Comment"("articleId"); + +-- CreateIndex +CREATE INDEX "Comment_parentId_idx" ON "Comment"("parentId"); + +-- AddForeignKey +ALTER TABLE "Category" ADD CONSTRAINT "Category_parentId_fkey" FOREIGN KEY ("parentId") REFERENCES "Category"("id") ON DELETE SET NULL ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Article" ADD CONSTRAINT "Article_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ArticleCategory" ADD CONSTRAINT "ArticleCategory_articleId_fkey" FOREIGN KEY ("articleId") REFERENCES "Article"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ArticleCategory" ADD CONSTRAINT "ArticleCategory_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "Category"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ArticleTag" ADD CONSTRAINT "ArticleTag_articleId_fkey" FOREIGN KEY ("articleId") REFERENCES "Article"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ArticleTag" ADD CONSTRAINT "ArticleTag_tagId_fkey" FOREIGN KEY ("tagId") REFERENCES "Tag"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ArticleImage" ADD CONSTRAINT "ArticleImage_articleId_fkey" FOREIGN KEY ("articleId") REFERENCES "Article"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "ArticleImage" ADD CONSTRAINT "ArticleImage_imageId_fkey" FOREIGN KEY ("imageId") REFERENCES "Image"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Comment" ADD CONSTRAINT "Comment_articleId_fkey" FOREIGN KEY ("articleId") REFERENCES "Article"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Comment" ADD CONSTRAINT "Comment_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Comment" ADD CONSTRAINT "Comment_parentId_fkey" FOREIGN KEY ("parentId") REFERENCES "Comment"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Bookmark" ADD CONSTRAINT "Bookmark_userId_fkey" FOREIGN KEY ("userId") REFERENCES "User"("id") ON DELETE CASCADE ON UPDATE CASCADE; + +-- AddForeignKey +ALTER TABLE "Bookmark" ADD CONSTRAINT "Bookmark_articleId_fkey" FOREIGN KEY ("articleId") REFERENCES "Article"("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"