From 24868ec1b8fa3ecd78e06fb4a925ea6dfbdd2d6d Mon Sep 17 00:00:00 2001 From: Schalli Date: Mon, 29 Jun 2026 15:17:27 +0200 Subject: [PATCH] chore(db): add migration for all tables missing from history Captures DashboardLayout, WidgetInstance, SearchProvider, CalendarSource, DkvModuleConfig, DkvVehicleMaster, DkvInvoiceHistory, SmtpConfig. Co-Authored-By: Claude Sonnet 4.6 --- .../migration.sql | 170 ++++++++++++++++++ 1 file changed, 170 insertions(+) create mode 100644 apps/api/prisma/migrations/20260629130000_add_missing_tables/migration.sql diff --git a/apps/api/prisma/migrations/20260629130000_add_missing_tables/migration.sql b/apps/api/prisma/migrations/20260629130000_add_missing_tables/migration.sql new file mode 100644 index 0000000..8ee1e6b --- /dev/null +++ b/apps/api/prisma/migrations/20260629130000_add_missing_tables/migration.sql @@ -0,0 +1,170 @@ +-- CreateTable +CREATE TABLE "DashboardLayout" ( + "id" TEXT NOT NULL, + "userId" TEXT NOT NULL, + "tenantId" TEXT NOT NULL, + "layouts" JSONB NOT NULL DEFAULT '{}', + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "DashboardLayout_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "WidgetInstance" ( + "id" TEXT NOT NULL, + "userId" TEXT NOT NULL, + "tenantId" TEXT NOT NULL, + "widgetType" TEXT NOT NULL, + "config" JSONB NOT NULL DEFAULT '{}', + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "WidgetInstance_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "SearchProvider" ( + "id" TEXT NOT NULL, + "userId" TEXT, + "tenantId" TEXT, + "name" TEXT NOT NULL, + "urlTemplate" TEXT NOT NULL, + "isDefault" BOOLEAN NOT NULL DEFAULT false, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "SearchProvider_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "CalendarSource" ( + "id" TEXT NOT NULL, + "userId" TEXT NOT NULL, + "tenantId" TEXT NOT NULL, + "name" TEXT NOT NULL, + "type" TEXT NOT NULL, + "exchangeMode" TEXT, + "url" TEXT NOT NULL, + "username" TEXT, + "encryptedPassword" TEXT, + "color" TEXT DEFAULT '#3B82F6', + "isVisible" BOOLEAN NOT NULL DEFAULT true, + "syncIntervalMin" INTEGER NOT NULL DEFAULT 15, + "lastSyncAt" TIMESTAMP(3), + "lastSyncError" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "CalendarSource_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "DkvModuleConfig" ( + "id" TEXT NOT NULL, + "tenantId" TEXT NOT NULL, + "protocol" TEXT NOT NULL DEFAULT 'imap', + "host" TEXT, + "port" INTEGER, + "encryption" TEXT NOT NULL DEFAULT 'ssl-tls', + "folder" TEXT NOT NULL DEFAULT 'INBOX', + "senderFilter" TEXT, + "pollIntervalMin" INTEGER NOT NULL DEFAULT 60, + "isActive" BOOLEAN NOT NULL DEFAULT false, + "exportRecipient" TEXT, + "vehicleFormatString" TEXT NOT NULL DEFAULT '{Marke}/{Modell}/{Kennzeichen}', + "domain" TEXT, + "encryptedInboxCreds" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "DkvModuleConfig_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "DkvVehicleMaster" ( + "id" TEXT NOT NULL, + "tenantId" TEXT NOT NULL, + "kennzeichen" TEXT NOT NULL, + "marke" TEXT NOT NULL, + "modell" TEXT NOT NULL, + "fahrer" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "DkvVehicleMaster_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "DkvInvoiceHistory" ( + "id" TEXT NOT NULL, + "tenantId" TEXT NOT NULL, + "datumZeit" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "rechnungsnummer" TEXT NOT NULL, + "anzahlFahrzeuge" INTEGER NOT NULL DEFAULT 0, + "anzahlTransaktionen" INTEGER NOT NULL DEFAULT 0, + "status" TEXT NOT NULL, + "errorMessage" TEXT, + "exportFilename" TEXT, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + + CONSTRAINT "DkvInvoiceHistory_pkey" PRIMARY KEY ("id") +); + +-- CreateTable +CREATE TABLE "SmtpConfig" ( + "id" TEXT NOT NULL, + "tenantId" TEXT NOT NULL, + "host" TEXT NOT NULL, + "port" INTEGER NOT NULL DEFAULT 587, + "encryption" TEXT NOT NULL DEFAULT 'starttls', + "username" TEXT, + "encryptedPassword" TEXT, + "fromAddress" TEXT NOT NULL, + "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP, + "updatedAt" TIMESTAMP(3) NOT NULL, + + CONSTRAINT "SmtpConfig_pkey" PRIMARY KEY ("id") +); + +-- CreateIndex +CREATE UNIQUE INDEX "DashboardLayout_userId_key" ON "DashboardLayout"("userId"); + +-- CreateIndex +CREATE INDEX "DashboardLayout_tenantId_idx" ON "DashboardLayout"("tenantId"); + +-- CreateIndex +CREATE INDEX "WidgetInstance_userId_idx" ON "WidgetInstance"("userId"); + +-- CreateIndex +CREATE INDEX "WidgetInstance_tenantId_idx" ON "WidgetInstance"("tenantId"); + +-- CreateIndex +CREATE INDEX "SearchProvider_userId_idx" ON "SearchProvider"("userId"); + +-- CreateIndex +CREATE INDEX "CalendarSource_userId_idx" ON "CalendarSource"("userId"); + +-- CreateIndex +CREATE INDEX "CalendarSource_tenantId_idx" ON "CalendarSource"("tenantId"); + +-- CreateIndex +CREATE UNIQUE INDEX "DkvModuleConfig_tenantId_key" ON "DkvModuleConfig"("tenantId"); + +-- CreateIndex +CREATE INDEX "DkvModuleConfig_tenantId_idx" ON "DkvModuleConfig"("tenantId"); + +-- CreateIndex +CREATE INDEX "DkvVehicleMaster_tenantId_idx" ON "DkvVehicleMaster"("tenantId"); + +-- CreateIndex +CREATE UNIQUE INDEX "DkvVehicleMaster_tenantId_kennzeichen_key" ON "DkvVehicleMaster"("tenantId", "kennzeichen"); + +-- CreateIndex +CREATE INDEX "DkvInvoiceHistory_tenantId_idx" ON "DkvInvoiceHistory"("tenantId"); + +-- CreateIndex +CREATE INDEX "DkvInvoiceHistory_datumZeit_idx" ON "DkvInvoiceHistory"("datumZeit"); + +-- CreateIndex +CREATE UNIQUE INDEX "SmtpConfig_tenantId_key" ON "SmtpConfig"("tenantId"); +