From 08ecf4c61a476d88eb463a950c5080389b2733fc Mon Sep 17 00:00:00 2001 From: Pepe Ziberi Date: Thu, 21 May 2026 15:42:22 +0200 Subject: [PATCH] =?UTF-8?q?fix(schema):=20ensureTables()=20f=C3=BCgt=20jet?= =?UTF-8?q?zt=20fehlende=20Spalten=20nachtr=C3=A4glich=20hinzu=20=E2=80=93?= =?UTF-8?q?=20verhindert=20altes=20Schema-Problem?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- src/app/api/icons/route.ts | 28 ++++++++++++++++++++++++++- src/app/api/tenant/symbols/route.ts | 30 ++++++++++++++++++++++++++++- 2 files changed, 56 insertions(+), 2 deletions(-) diff --git a/src/app/api/icons/route.ts b/src/app/api/icons/route.ts index c567587..7e45efa 100644 --- a/src/app/api/icons/route.ts +++ b/src/app/api/icons/route.ts @@ -32,6 +32,32 @@ async function ensureTables() { "tenantId" TEXT NOT NULL REFERENCES tenants(id) ON DELETE CASCADE ) `) + + const symbolCols = [ + `ALTER TABLE tenant_symbols ADD COLUMN IF NOT EXISTS "name" TEXT`, + `ALTER TABLE tenant_symbols ADD COLUMN IF NOT EXISTS "svgPath" TEXT`, + `ALTER TABLE tenant_symbols ADD COLUMN IF NOT EXISTS "isUploaded" BOOLEAN NOT NULL DEFAULT false`, + `ALTER TABLE tenant_symbols ADD COLUMN IF NOT EXISTS "categoryId" TEXT`, + `ALTER TABLE tenant_symbols ADD COLUMN IF NOT EXISTS "migratedFromIconId" TEXT`, + `ALTER TABLE tenant_symbols ADD COLUMN IF NOT EXISTS "customName" TEXT`, + `ALTER TABLE tenant_symbols ADD COLUMN IF NOT EXISTS "sortOrder" INTEGER`, + `ALTER TABLE tenant_symbols ADD COLUMN IF NOT EXISTS "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP`, + `ALTER TABLE tenant_symbols ADD COLUMN IF NOT EXISTS "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP`, + ] + for (const sql of symbolCols) { + try { await prisma.$executeRawUnsafe(sql) } catch (e) { /* ignore */ } + } + + const catCols = [ + `ALTER TABLE tenant_categories ADD COLUMN IF NOT EXISTS "description" TEXT`, + `ALTER TABLE tenant_categories ADD COLUMN IF NOT EXISTS "sortOrder" INTEGER NOT NULL DEFAULT 0`, + `ALTER TABLE tenant_categories ADD COLUMN IF NOT EXISTS "isActive" BOOLEAN NOT NULL DEFAULT true`, + `ALTER TABLE tenant_categories ADD COLUMN IF NOT EXISTS "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP`, + `ALTER TABLE tenant_categories ADD COLUMN IF NOT EXISTS "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP`, + ] + for (const sql of catCols) { + try { await prisma.$executeRawUnsafe(sql) } catch (e) { /* ignore */ } + } } export async function GET() { @@ -93,7 +119,7 @@ export async function GET() { `SELECT ts.*, tc.id as "catId", tc.name as "catName" FROM tenant_symbols ts LEFT JOIN tenant_categories tc ON ts."categoryId" = tc.id - WHERE ts."tenantId" = $1 AND ts."isActive" = true + WHERE ts."tenantId" = $1 AND (ts."isActive" IS NULL OR ts."isActive" = true) ORDER BY COALESCE(tc."sortOrder", 9999) ASC, COALESCE(ts."sortOrder", 9999) ASC`, tenantId ) as any[] diff --git a/src/app/api/tenant/symbols/route.ts b/src/app/api/tenant/symbols/route.ts index 37e61d6..698b631 100644 --- a/src/app/api/tenant/symbols/route.ts +++ b/src/app/api/tenant/symbols/route.ts @@ -14,6 +14,7 @@ async function getTenantId() { } async function ensureTables() { + // ─── Create tables (idempotent) ─── await prisma.$executeRawUnsafe(` CREATE TABLE IF NOT EXISTS tenant_symbols ( id TEXT PRIMARY KEY DEFAULT gen_random_uuid(), @@ -43,6 +44,33 @@ async function ensureTables() { "tenantId" TEXT NOT NULL REFERENCES tenants(id) ON DELETE CASCADE ) `) + + // ─── Add missing columns (idempotent) ─── + const symbolCols = [ + `ALTER TABLE tenant_symbols ADD COLUMN IF NOT EXISTS "name" TEXT`, + `ALTER TABLE tenant_symbols ADD COLUMN IF NOT EXISTS "svgPath" TEXT`, + `ALTER TABLE tenant_symbols ADD COLUMN IF NOT EXISTS "isUploaded" BOOLEAN NOT NULL DEFAULT false`, + `ALTER TABLE tenant_symbols ADD COLUMN IF NOT EXISTS "categoryId" TEXT`, + `ALTER TABLE tenant_symbols ADD COLUMN IF NOT EXISTS "migratedFromIconId" TEXT`, + `ALTER TABLE tenant_symbols ADD COLUMN IF NOT EXISTS "customName" TEXT`, + `ALTER TABLE tenant_symbols ADD COLUMN IF NOT EXISTS "sortOrder" INTEGER`, + `ALTER TABLE tenant_symbols ADD COLUMN IF NOT EXISTS "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP`, + `ALTER TABLE tenant_symbols ADD COLUMN IF NOT EXISTS "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP`, + ] + for (const sql of symbolCols) { + try { await prisma.$executeRawUnsafe(sql) } catch (e) { /* ignore */ } + } + + const catCols = [ + `ALTER TABLE tenant_categories ADD COLUMN IF NOT EXISTS "description" TEXT`, + `ALTER TABLE tenant_categories ADD COLUMN IF NOT EXISTS "sortOrder" INTEGER NOT NULL DEFAULT 0`, + `ALTER TABLE tenant_categories ADD COLUMN IF NOT EXISTS "isActive" BOOLEAN NOT NULL DEFAULT true`, + `ALTER TABLE tenant_categories ADD COLUMN IF NOT EXISTS "createdAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP`, + `ALTER TABLE tenant_categories ADD COLUMN IF NOT EXISTS "updatedAt" TIMESTAMP(3) NOT NULL DEFAULT CURRENT_TIMESTAMP`, + ] + for (const sql of catCols) { + try { await prisma.$executeRawUnsafe(sql) } catch (e) { /* ignore */ } + } } // ─── GET ──────────────────────────────────────────────────────────────────── @@ -95,7 +123,7 @@ export async function GET(req: NextRequest) { // Get categories for ordering const categories: any[] = await prisma.$queryRawUnsafe( - `SELECT * FROM tenant_categories WHERE "tenantId" = $1 AND "isActive" = true ORDER BY "sortOrder" ASC`, + `SELECT * FROM tenant_categories WHERE "tenantId" = $1 AND ("isActive" IS NULL OR "isActive" = true) ORDER BY "sortOrder" ASC`, tenantId )