-- CreateEnum CREATE TYPE "VerificationStatus" AS ENUM ('PENDING', 'APPROVED', 'REJECTED'); -- CreateEnum CREATE TYPE "CategoryScope" AS ENUM ('CONTENT', 'BRAND'); -- CreateTable CREATE TABLE "User" ( "id" TEXT NOT NULL, "email" TEXT NOT NULL, "passwordHash" TEXT NOT NULL, "name" TEXT, "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, "scope" "CategoryScope" 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 "Blog" ( "id" TEXT NOT NULL, "title" TEXT NOT NULL, "slug" TEXT NOT NULL, "abstract" TEXT, "content" TEXT NOT NULL DEFAULT '', "imageUrl" TEXT, "tags" TEXT[] DEFAULT ARRAY[]::TEXT[], "verificationStatus" "VerificationStatus" NOT NULL DEFAULT 'PENDING', "authorId" TEXT NOT NULL, "publishedAt" TIMESTAMP(3), "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL, CONSTRAINT "Blog_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "BlogCategory" ( "blogId" TEXT NOT NULL, "categoryId" TEXT NOT NULL, CONSTRAINT "BlogCategory_pkey" PRIMARY KEY ("blogId","categoryId") ); -- CreateTable CREATE TABLE "Reportage" ( "id" TEXT NOT NULL, "title" TEXT NOT NULL, "slug" TEXT NOT NULL, "businessOwner" TEXT NOT NULL, "abstract" TEXT, "content" TEXT NOT NULL DEFAULT '', "imageUrl" TEXT, "tags" TEXT[] DEFAULT ARRAY[]::TEXT[], "verificationStatus" "VerificationStatus" NOT NULL DEFAULT 'PENDING', "authorId" TEXT NOT NULL, "publishedAt" TIMESTAMP(3), "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL, CONSTRAINT "Reportage_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "ReportageCategory" ( "reportageId" TEXT NOT NULL, "categoryId" TEXT NOT NULL, CONSTRAINT "ReportageCategory_pkey" PRIMARY KEY ("reportageId","categoryId") ); -- CreateTable CREATE TABLE "Brand" ( "id" TEXT NOT NULL, "title" TEXT NOT NULL, "slug" TEXT NOT NULL, "abstract" TEXT, "content" TEXT NOT NULL DEFAULT '', "imageUrl" TEXT, "tags" TEXT[] DEFAULT ARRAY[]::TEXT[], "country" TEXT NOT NULL, "address" TEXT, "contacts" JSONB NOT NULL DEFAULT '[]', "verificationStatus" "VerificationStatus" NOT NULL DEFAULT 'PENDING', "authorId" TEXT NOT NULL, "publishedAt" TIMESTAMP(3), "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, "updatedAt" TIMESTAMP(3) NOT NULL, CONSTRAINT "Brand_pkey" PRIMARY KEY ("id") ); -- CreateTable CREATE TABLE "BrandCategory" ( "brandId" TEXT NOT NULL, "categoryId" TEXT NOT NULL, CONSTRAINT "BrandCategory_pkey" PRIMARY KEY ("brandId","categoryId") ); -- CreateIndex CREATE UNIQUE INDEX "User_email_key" ON "User"("email"); -- CreateIndex CREATE INDEX "Category_parentId_idx" ON "Category"("parentId"); -- CreateIndex CREATE INDEX "Category_scope_idx" ON "Category"("scope"); -- CreateIndex CREATE UNIQUE INDEX "Category_scope_slug_key" ON "Category"("scope", "slug"); -- CreateIndex CREATE UNIQUE INDEX "Blog_slug_key" ON "Blog"("slug"); -- CreateIndex CREATE INDEX "Blog_authorId_idx" ON "Blog"("authorId"); -- CreateIndex CREATE INDEX "Blog_verificationStatus_idx" ON "Blog"("verificationStatus"); -- CreateIndex CREATE INDEX "BlogCategory_categoryId_idx" ON "BlogCategory"("categoryId"); -- CreateIndex CREATE UNIQUE INDEX "Reportage_slug_key" ON "Reportage"("slug"); -- CreateIndex CREATE INDEX "Reportage_authorId_idx" ON "Reportage"("authorId"); -- CreateIndex CREATE INDEX "Reportage_verificationStatus_idx" ON "Reportage"("verificationStatus"); -- CreateIndex CREATE INDEX "ReportageCategory_categoryId_idx" ON "ReportageCategory"("categoryId"); -- CreateIndex CREATE UNIQUE INDEX "Brand_slug_key" ON "Brand"("slug"); -- CreateIndex CREATE INDEX "Brand_authorId_idx" ON "Brand"("authorId"); -- CreateIndex CREATE INDEX "Brand_verificationStatus_idx" ON "Brand"("verificationStatus"); -- CreateIndex CREATE INDEX "Brand_country_idx" ON "Brand"("country"); -- CreateIndex CREATE INDEX "BrandCategory_categoryId_idx" ON "BrandCategory"("categoryId"); -- 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 "Blog" ADD CONSTRAINT "Blog_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "BlogCategory" ADD CONSTRAINT "BlogCategory_blogId_fkey" FOREIGN KEY ("blogId") REFERENCES "Blog"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "BlogCategory" ADD CONSTRAINT "BlogCategory_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "Category"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "Reportage" ADD CONSTRAINT "Reportage_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "ReportageCategory" ADD CONSTRAINT "ReportageCategory_reportageId_fkey" FOREIGN KEY ("reportageId") REFERENCES "Reportage"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "ReportageCategory" ADD CONSTRAINT "ReportageCategory_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "Category"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "Brand" ADD CONSTRAINT "Brand_authorId_fkey" FOREIGN KEY ("authorId") REFERENCES "User"("id") ON DELETE RESTRICT ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "BrandCategory" ADD CONSTRAINT "BrandCategory_brandId_fkey" FOREIGN KEY ("brandId") REFERENCES "Brand"("id") ON DELETE CASCADE ON UPDATE CASCADE; -- AddForeignKey ALTER TABLE "BrandCategory" ADD CONSTRAINT "BrandCategory_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "Category"("id") ON DELETE CASCADE ON UPDATE CASCADE;