From 0d1b5869c52a3576afddee94522a5b66c723bf84 Mon Sep 17 00:00:00 2001 From: hyeonsu Date: Mon, 1 Sep 2025 15:37:49 +0900 Subject: [PATCH] =?UTF-8?q?=ED=85=8C=EC=9D=B4=EB=B8=94=20=ED=83=80?= =?UTF-8?q?=EC=9E=85=EA=B4=80=EB=A6=AC=20=EC=97=90=EB=9F=AC=20=ED=95=B4?= =?UTF-8?q?=EA=B2=B0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../src/services/tableManagementService.ts | 21 +++++++++++++++++-- 1 file changed, 19 insertions(+), 2 deletions(-) diff --git a/backend-node/src/services/tableManagementService.ts b/backend-node/src/services/tableManagementService.ts index df1246a6..74412e3b 100644 --- a/backend-node/src/services/tableManagementService.ts +++ b/backend-node/src/services/tableManagementService.ts @@ -22,7 +22,7 @@ export class TableManagementService { logger.info("테이블 목록 조회 시작"); // information_schema는 여전히 $queryRaw 사용 - const tables = await prisma.$queryRaw` + const rawTables = await prisma.$queryRaw` SELECT t.table_name as "tableName", COALESCE(tl.table_label, t.table_name) as "displayName", @@ -38,6 +38,12 @@ export class TableManagementService { ORDER BY t.table_name `; + // BigInt를 Number로 변환하여 JSON 직렬화 문제 해결 + const tables: TableInfo[] = rawTables.map((table) => ({ + ...table, + columnCount: Number(table.columnCount), // BigInt → Number 변환 + })); + logger.info(`테이블 목록 조회 완료: ${tables.length}개`); return tables; } catch (error) { @@ -57,7 +63,7 @@ export class TableManagementService { logger.info(`컬럼 정보 조회 시작: ${tableName}`); // information_schema는 여전히 $queryRaw 사용 - const columns = await prisma.$queryRaw` + const rawColumns = await prisma.$queryRaw` SELECT c.column_name as "columnName", COALESCE(cl.column_label, c.column_name) as "displayName", @@ -82,6 +88,17 @@ export class TableManagementService { ORDER BY c.ordinal_position `; + // BigInt를 Number로 변환하여 JSON 직렬화 문제 해결 + const columns: ColumnTypeInfo[] = rawColumns.map((column) => ({ + ...column, + maxLength: column.maxLength ? Number(column.maxLength) : null, + numericPrecision: column.numericPrecision + ? Number(column.numericPrecision) + : null, + numericScale: column.numericScale ? Number(column.numericScale) : null, + displayOrder: column.displayOrder ? Number(column.displayOrder) : null, + })); + logger.info(`컬럼 정보 조회 완료: ${tableName}, ${columns.length}개`); return columns; } catch (error) {