import { NextRequest, NextResponse } from 'next/server' import { prisma } from '@/lib/db' import { getSession } from '@/lib/auth' export async function GET() { try { const user = await getSession() // Build icon filter: global icons (tenantId=null) + tenant-specific icons const iconFilter: any = { isActive: true } if (user?.tenantId) { iconFilter.OR = [ { tenantId: null }, { tenantId: user.tenantId }, ] delete iconFilter.isActive iconFilter.AND = [{ isActive: true }] } else { // Server admin or no tenant: show all global icons iconFilter.tenantId = null } // Filter categories: global (tenantId=null) + tenant-specific const categoryWhere: any = user?.tenantId ? { OR: [{ tenantId: null }, { tenantId: user.tenantId }] } : {} const categories = await (prisma as any).iconCategory.findMany({ where: categoryWhere, orderBy: { sortOrder: 'asc' }, include: { icons: { where: user?.tenantId ? { isActive: true, OR: [{ tenantId: null }, { tenantId: user.tenantId }] } : { isActive: true }, orderBy: { name: 'asc' }, }, }, }) // Get tenant's hidden icon IDs (legacy) + TenantSymbol overrides let hiddenIconIds: string[] = [] let deactivatedIconIds = new Set() if (user?.tenantId) { const [tenant, tenantSymbols] = await Promise.all([ (prisma as any).tenant.findUnique({ where: { id: user.tenantId }, select: { hiddenIconIds: true }, }), (prisma as any).tenantSymbol.findMany({ where: { tenantId: user.tenantId, isActive: false }, select: { iconId: true }, }), ]) hiddenIconIds = tenant?.hiddenIconIds || [] deactivatedIconIds = new Set(tenantSymbols.map((ts: any) => ts.iconId)) } const categoriesWithUrls = categories.map((cat: any) => ({ ...cat, icons: cat.icons .filter((icon: any) => !hiddenIconIds.includes(icon.id) && !deactivatedIconIds.has(icon.id)) .map((icon: any) => ({ ...icon, url: `/api/icons/${icon.id}/image`, })), })) return NextResponse.json({ categories: categoriesWithUrls }) } catch (error) { console.error('Error fetching icons:', error) return NextResponse.json({ error: 'Serverfehler' }, { status: 500 }) } }