Scaffold SSR site with CMS/blog/gallery/SEO admin and deploy configs for montech.ir. Co-authored-by: Cursor <cursoragent@cursor.com>
114 lines
3.3 KiB
SQL
114 lines
3.3 KiB
SQL
-- CreateSchema
|
|
CREATE SCHEMA IF NOT EXISTS "public";
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Admin" (
|
|
"id" TEXT NOT NULL,
|
|
"mobile" TEXT NOT NULL,
|
|
"email" TEXT,
|
|
"passwordHash" TEXT NOT NULL,
|
|
"name" TEXT NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Admin_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "SiteSettings" (
|
|
"id" TEXT NOT NULL DEFAULT 'default',
|
|
"brandName" TEXT NOT NULL DEFAULT 'Montech',
|
|
"tagline" TEXT NOT NULL DEFAULT 'Software Development Group',
|
|
"email" TEXT NOT NULL DEFAULT 'hello@montech.ir',
|
|
"phone" TEXT NOT NULL DEFAULT '+98 21 0000 0000',
|
|
"address" TEXT NOT NULL DEFAULT 'Tehran, IR',
|
|
"timezone" TEXT NOT NULL DEFAULT 'Asia/Tehran',
|
|
"socials" JSONB NOT NULL DEFAULT '[]',
|
|
"logoUrl" TEXT,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "SiteSettings_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "Page" (
|
|
"id" TEXT NOT NULL,
|
|
"key" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Page_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "PageSeo" (
|
|
"id" TEXT NOT NULL,
|
|
"pageId" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT NOT NULL DEFAULT '',
|
|
"ogImage" TEXT,
|
|
"canonical" TEXT,
|
|
"noIndex" BOOLEAN NOT NULL DEFAULT false,
|
|
|
|
CONSTRAINT "PageSeo_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "SectionContent" (
|
|
"id" TEXT NOT NULL,
|
|
"key" TEXT NOT NULL,
|
|
"data" JSONB NOT NULL,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "SectionContent_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "BlogPost" (
|
|
"id" TEXT NOT NULL,
|
|
"slug" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"excerpt" TEXT NOT NULL DEFAULT '',
|
|
"content" TEXT NOT NULL DEFAULT '',
|
|
"coverUrl" TEXT,
|
|
"published" BOOLEAN NOT NULL DEFAULT false,
|
|
"publishedAt" TIMESTAMP(3),
|
|
"seoTitle" TEXT,
|
|
"seoDesc" TEXT,
|
|
"ogImage" TEXT,
|
|
"canonical" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "BlogPost_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "GalleryItem" (
|
|
"id" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"imageUrl" TEXT NOT NULL,
|
|
"category" TEXT,
|
|
"sortOrder" INTEGER NOT NULL DEFAULT 0,
|
|
"published" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "GalleryItem_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE TABLE "Media" (
|
|
"id" TEXT NOT NULL,
|
|
"filename" TEXT NOT NULL,
|
|
"url" TEXT NOT NULL,
|
|
"mimeType" TEXT NOT NULL,
|
|
"size" INTEGER NOT NULL,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
|
|
CONSTRAINT "Media_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
CREATE UNIQUE INDEX "Admin_mobile_key" ON "Admin"("mobile");
|
|
CREATE UNIQUE INDEX "Admin_email_key" ON "Admin"("email");
|
|
CREATE UNIQUE INDEX "Page_key_key" ON "Page"("key");
|
|
CREATE UNIQUE INDEX "PageSeo_pageId_key" ON "PageSeo"("pageId");
|
|
CREATE UNIQUE INDEX "SectionContent_key_key" ON "SectionContent"("key");
|
|
CREATE UNIQUE INDEX "BlogPost_slug_key" ON "BlogPost"("slug");
|
|
|
|
ALTER TABLE "PageSeo" ADD CONSTRAINT "PageSeo_pageId_fkey" FOREIGN KEY ("pageId") REFERENCES "Page"("id") ON DELETE CASCADE ON UPDATE CASCADE;
|