113 lines
3.6 KiB
SQL
113 lines
3.6 KiB
SQL
CREATE TYPE "PortfolioSectionType" AS ENUM (
|
|
'RICH_TEXT',
|
|
'GALLERY',
|
|
'STATS',
|
|
'DELIVERABLES',
|
|
'LINK'
|
|
);
|
|
|
|
CREATE TYPE "PortfolioAssetKind" AS ENUM (
|
|
'IMAGE',
|
|
'DOCUMENT'
|
|
);
|
|
|
|
CREATE TABLE "Category" (
|
|
"id" TEXT NOT NULL,
|
|
"slug" TEXT NOT NULL,
|
|
"nameAr" TEXT NOT NULL,
|
|
"nameEn" TEXT NOT NULL,
|
|
"nameDe" TEXT NOT NULL,
|
|
"descriptionAr" TEXT NOT NULL,
|
|
"descriptionEn" TEXT NOT NULL,
|
|
"descriptionDe" TEXT NOT NULL,
|
|
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Category_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "PortfolioProject" (
|
|
"id" TEXT NOT NULL,
|
|
"categoryId" TEXT NOT NULL,
|
|
"slug" TEXT NOT NULL,
|
|
"titleAr" TEXT NOT NULL,
|
|
"titleEn" TEXT NOT NULL,
|
|
"titleDe" TEXT NOT NULL,
|
|
"summaryAr" TEXT NOT NULL,
|
|
"summaryEn" TEXT NOT NULL,
|
|
"summaryDe" TEXT NOT NULL,
|
|
"clientName" TEXT NOT NULL,
|
|
"projectYear" INTEGER NOT NULL,
|
|
"serviceLabelAr" TEXT NOT NULL,
|
|
"serviceLabelEn" TEXT NOT NULL,
|
|
"serviceLabelDe" TEXT NOT NULL,
|
|
"previewUrl" TEXT,
|
|
"coverImagePath" TEXT,
|
|
"isFeatured" BOOLEAN NOT NULL DEFAULT false,
|
|
"isPublished" BOOLEAN NOT NULL DEFAULT false,
|
|
"publishedAt" TIMESTAMP(3),
|
|
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "PortfolioProject_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "PortfolioSection" (
|
|
"id" TEXT NOT NULL,
|
|
"projectId" TEXT NOT NULL,
|
|
"type" "PortfolioSectionType" NOT NULL,
|
|
"titleAr" TEXT NOT NULL,
|
|
"titleEn" TEXT NOT NULL,
|
|
"titleDe" TEXT NOT NULL,
|
|
"bodyAr" TEXT NOT NULL,
|
|
"bodyEn" TEXT NOT NULL,
|
|
"bodyDe" TEXT NOT NULL,
|
|
"imagePath" TEXT,
|
|
"linkUrl" TEXT,
|
|
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "PortfolioSection_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "PortfolioAsset" (
|
|
"id" TEXT NOT NULL,
|
|
"projectId" TEXT NOT NULL,
|
|
"kind" "PortfolioAssetKind" NOT NULL,
|
|
"filePath" TEXT NOT NULL,
|
|
"altAr" TEXT NOT NULL,
|
|
"altEn" TEXT NOT NULL,
|
|
"altDe" TEXT NOT NULL,
|
|
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "PortfolioAsset_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE UNIQUE INDEX "Category_slug_key" ON "Category"("slug");
|
|
CREATE UNIQUE INDEX "PortfolioProject_slug_key" ON "PortfolioProject"("slug");
|
|
CREATE INDEX "PortfolioProject_categoryId_isPublished_sortOrder_idx" ON "PortfolioProject"("categoryId", "isPublished", "sortOrder");
|
|
CREATE INDEX "PortfolioProject_isPublished_sortOrder_idx" ON "PortfolioProject"("isPublished", "sortOrder");
|
|
CREATE INDEX "PortfolioSection_projectId_sortOrder_idx" ON "PortfolioSection"("projectId", "sortOrder");
|
|
CREATE INDEX "PortfolioAsset_projectId_sortOrder_idx" ON "PortfolioAsset"("projectId", "sortOrder");
|
|
|
|
ALTER TABLE "PortfolioProject"
|
|
ADD CONSTRAINT "PortfolioProject_categoryId_fkey"
|
|
FOREIGN KEY ("categoryId") REFERENCES "Category"("id")
|
|
ON DELETE RESTRICT ON UPDATE CASCADE;
|
|
|
|
ALTER TABLE "PortfolioSection"
|
|
ADD CONSTRAINT "PortfolioSection_projectId_fkey"
|
|
FOREIGN KEY ("projectId") REFERENCES "PortfolioProject"("id")
|
|
ON DELETE CASCADE ON UPDATE CASCADE;
|
|
|
|
ALTER TABLE "PortfolioAsset"
|
|
ADD CONSTRAINT "PortfolioAsset_projectId_fkey"
|
|
FOREIGN KEY ("projectId") REFERENCES "PortfolioProject"("id")
|
|
ON DELETE CASCADE ON UPDATE CASCADE;
|