122 lines
3.4 KiB
SQL
122 lines
3.4 KiB
SQL
-- CreateEnum
|
|
CREATE TYPE "CategoryKind" AS ENUM ('PORTFOLIO', 'APP', 'MELODY');
|
|
|
|
-- CreateEnum
|
|
CREATE TYPE "PublishStatus" AS ENUM ('DRAFT', 'PUBLISHED', 'ARCHIVED');
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Category" (
|
|
"id" TEXT NOT NULL,
|
|
"kind" "CategoryKind" NOT NULL,
|
|
"slug" TEXT NOT NULL,
|
|
"nameAr" TEXT NOT NULL,
|
|
"nameEn" TEXT NOT NULL,
|
|
"order" INTEGER NOT NULL DEFAULT 0,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Category_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Work" (
|
|
"id" TEXT NOT NULL,
|
|
"slug" TEXT NOT NULL,
|
|
"titleAr" TEXT NOT NULL,
|
|
"titleEn" TEXT NOT NULL,
|
|
"summaryAr" TEXT,
|
|
"summaryEn" TEXT,
|
|
"coverImage" TEXT,
|
|
"images" TEXT[],
|
|
"externalUrl" TEXT,
|
|
"status" "PublishStatus" NOT NULL DEFAULT 'DRAFT',
|
|
"categoryId" TEXT NOT NULL,
|
|
"order" INTEGER NOT NULL DEFAULT 0,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Work_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "App" (
|
|
"id" TEXT NOT NULL,
|
|
"slug" TEXT NOT NULL,
|
|
"titleAr" TEXT NOT NULL,
|
|
"titleEn" TEXT NOT NULL,
|
|
"descAr" TEXT,
|
|
"descEn" TEXT,
|
|
"platform" TEXT,
|
|
"repoUrl" TEXT,
|
|
"liveUrl" TEXT,
|
|
"screenshots" TEXT[],
|
|
"status" "PublishStatus" NOT NULL DEFAULT 'DRAFT',
|
|
"categoryId" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "App_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Melody" (
|
|
"id" TEXT NOT NULL,
|
|
"slug" TEXT NOT NULL,
|
|
"titleAr" TEXT NOT NULL,
|
|
"titleEn" TEXT NOT NULL,
|
|
"audioFile" TEXT NOT NULL,
|
|
"coverImage" TEXT,
|
|
"durationSec" INTEGER,
|
|
"status" "PublishStatus" NOT NULL DEFAULT 'DRAFT',
|
|
"categoryId" TEXT NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Melody_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "ContactMessage" (
|
|
"id" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"email" TEXT NOT NULL,
|
|
"message" TEXT NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "ContactMessage_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "User" (
|
|
"id" TEXT NOT NULL,
|
|
"email" TEXT NOT NULL,
|
|
"password" TEXT NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "User_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Category_slug_key" ON "Category"("slug");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Work_slug_key" ON "Work"("slug");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "App_slug_key" ON "App"("slug");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Melody_slug_key" ON "Melody"("slug");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "User_email_key" ON "User"("email");
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Work" ADD CONSTRAINT "Work_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "Category"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "App" ADD CONSTRAINT "App_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "Category"("id") ON DELETE SET NULL ON UPDATE CASCADE;
|
|
|
|
-- AddForeignKey
|
|
ALTER TABLE "Melody" ADD CONSTRAINT "Melody_categoryId_fkey" FOREIGN KEY ("categoryId") REFERENCES "Category"("id") ON DELETE RESTRICT ON UPDATE CASCADE;
|