215 lines
6.2 KiB
SQL
215 lines
6.2 KiB
SQL
-- CreateSchema
|
|
CREATE SCHEMA IF NOT EXISTS "public";
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "AdminUser" (
|
|
"id" TEXT NOT NULL,
|
|
"username" TEXT NOT NULL,
|
|
"email" TEXT,
|
|
"passwordHash" TEXT NOT NULL,
|
|
"twoFactorSecret" TEXT,
|
|
"is2FAEnabled" BOOLEAN NOT NULL DEFAULT false,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "AdminUser_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "GlobalNode" (
|
|
"id" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"location" TEXT NOT NULL,
|
|
"lat" DOUBLE PRECISION NOT NULL,
|
|
"lon" DOUBLE PRECISION NOT NULL,
|
|
"nodeType" TEXT NOT NULL DEFAULT 'installation',
|
|
"application" TEXT NOT NULL,
|
|
"stats" TEXT NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"projectOverview" TEXT,
|
|
"energySavings" TEXT,
|
|
"eventDate" TIMESTAMP(3),
|
|
"mediaFileName" TEXT,
|
|
"galleryJson" TEXT DEFAULT '[]',
|
|
"videosJson" TEXT DEFAULT '[]',
|
|
"specificDatasheetJson" TEXT DEFAULT '[]',
|
|
"model3DPath" TEXT,
|
|
"rendersJson" TEXT DEFAULT '[]',
|
|
"model3DDimsJson" TEXT,
|
|
"translationsJson" TEXT DEFAULT '{}',
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "GlobalNode_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "Application" (
|
|
"id" TEXT NOT NULL,
|
|
"slug" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"subtitle" TEXT NOT NULL,
|
|
"category" TEXT NOT NULL,
|
|
"shortDescription" TEXT NOT NULL DEFAULT 'Learn more about this FLUX RF technology application.',
|
|
"heroDescription" TEXT NOT NULL,
|
|
"sectionsJson" TEXT NOT NULL,
|
|
"advantagesJson" TEXT NOT NULL,
|
|
"datasheetJson" TEXT NOT NULL,
|
|
"dashboardMetricsJson" TEXT DEFAULT '[]',
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"translationsJson" TEXT DEFAULT '{}',
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "Application_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "TimelineEvent" (
|
|
"id" TEXT NOT NULL,
|
|
"year" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT NOT NULL,
|
|
"order" INTEGER NOT NULL DEFAULT 0,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"translationsJson" TEXT DEFAULT '{}',
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "TimelineEvent_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "NewsArticle" (
|
|
"id" TEXT NOT NULL,
|
|
"slug" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"excerpt" TEXT NOT NULL,
|
|
"content" TEXT NOT NULL,
|
|
"coverImage" TEXT,
|
|
"category" TEXT NOT NULL DEFAULT 'News',
|
|
"publishedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"order" INTEGER NOT NULL DEFAULT 0,
|
|
"galleryJson" TEXT DEFAULT '[]',
|
|
"linkedinUrl" TEXT,
|
|
"translationsJson" TEXT DEFAULT '{}',
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "NewsArticle_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "HeritageSection" (
|
|
"id" TEXT NOT NULL,
|
|
"type" TEXT NOT NULL DEFAULT 'text',
|
|
"title" TEXT,
|
|
"content" TEXT,
|
|
"mediaUrl" TEXT,
|
|
"order" INTEGER NOT NULL DEFAULT 0,
|
|
"translationsJson" TEXT DEFAULT '{}',
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "HeritageSection_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "SparePart" (
|
|
"id" TEXT NOT NULL,
|
|
"sku" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"description" TEXT NOT NULL,
|
|
"mediaJson" TEXT DEFAULT '[]',
|
|
"specsJson" TEXT DEFAULT '[]',
|
|
"price" DOUBLE PRECISION,
|
|
"showPrice" BOOLEAN NOT NULL DEFAULT false,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"translationsJson" TEXT DEFAULT '{}',
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "SparePart_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "OperationsSignal" (
|
|
"id" TEXT NOT NULL,
|
|
"ticketId" TEXT NOT NULL,
|
|
"ticketNumber" SERIAL NOT NULL,
|
|
"type" TEXT NOT NULL,
|
|
"status" TEXT NOT NULL DEFAULT 'PENDING',
|
|
"clientName" TEXT NOT NULL,
|
|
"clientEmail" TEXT NOT NULL,
|
|
"clientCompany" TEXT NOT NULL,
|
|
"clientPhone" TEXT,
|
|
"message" TEXT,
|
|
"cartPayload" TEXT DEFAULT '[]',
|
|
"attachedFiles" TEXT DEFAULT '[]',
|
|
"aiAnalysis" TEXT,
|
|
"emailSentTo" TEXT,
|
|
"emailSentAt" TIMESTAMP(3),
|
|
"emailError" TEXT,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "OperationsSignal_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "NotificationRoute" (
|
|
"id" TEXT NOT NULL,
|
|
"routeType" TEXT NOT NULL,
|
|
"emails" TEXT NOT NULL,
|
|
"isActive" BOOLEAN NOT NULL DEFAULT true,
|
|
"createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP,
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "NotificationRoute_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateTable
|
|
CREATE TABLE "PageContent" (
|
|
"id" TEXT NOT NULL,
|
|
"slug" TEXT NOT NULL,
|
|
"title" TEXT NOT NULL,
|
|
"subtitle" TEXT,
|
|
"description" TEXT,
|
|
"translationsJson" TEXT DEFAULT '{}',
|
|
"updatedAt" TIMESTAMP(3) NOT NULL,
|
|
|
|
CONSTRAINT "PageContent_pkey" PRIMARY KEY ("id")
|
|
);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "AdminUser_username_key" ON "AdminUser"("username");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "Application_slug_key" ON "Application"("slug");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "NewsArticle_slug_key" ON "NewsArticle"("slug");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "SparePart_sku_key" ON "SparePart"("sku");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "OperationsSignal_ticketId_key" ON "OperationsSignal"("ticketId");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "OperationsSignal_type_idx" ON "OperationsSignal"("type");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "OperationsSignal_status_idx" ON "OperationsSignal"("status");
|
|
|
|
-- CreateIndex
|
|
CREATE INDEX "OperationsSignal_createdAt_idx" ON "OperationsSignal"("createdAt" DESC);
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "NotificationRoute_routeType_key" ON "NotificationRoute"("routeType");
|
|
|
|
-- CreateIndex
|
|
CREATE UNIQUE INDEX "PageContent_slug_key" ON "PageContent"("slug");
|
|
|