리피터 케이블 설정 구현
This commit is contained in:
@@ -97,10 +97,10 @@ export async function getColumnList(
|
||||
}
|
||||
|
||||
const tableManagementService = new TableManagementService();
|
||||
|
||||
|
||||
// 🔥 캐시 버스팅: _t 파라미터가 있으면 캐시 무시
|
||||
const bustCache = !!req.query._t;
|
||||
|
||||
|
||||
const result = await tableManagementService.getColumnList(
|
||||
tableName,
|
||||
parseInt(page as string),
|
||||
@@ -2376,3 +2376,90 @@ export async function getTableEntityRelations(
|
||||
res.status(500).json(response);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 현재 테이블을 참조(FK로 연결)하는 테이블 목록 조회
|
||||
* GET /api/table-management/columns/:tableName/referenced-by
|
||||
*
|
||||
* column_labels에서 reference_table이 현재 테이블인 레코드를 찾아서
|
||||
* 해당 테이블과 FK 컬럼 정보를 반환합니다.
|
||||
*/
|
||||
export async function getReferencedByTables(
|
||||
req: AuthenticatedRequest,
|
||||
res: Response
|
||||
): Promise<void> {
|
||||
try {
|
||||
const { tableName } = req.params;
|
||||
|
||||
logger.info(
|
||||
`=== 테이블 참조 관계 조회 시작: ${tableName} 을 참조하는 테이블 ===`
|
||||
);
|
||||
|
||||
if (!tableName) {
|
||||
const response: ApiResponse<null> = {
|
||||
success: false,
|
||||
message: "tableName 파라미터가 필요합니다.",
|
||||
error: {
|
||||
code: "MISSING_PARAMETERS",
|
||||
details: "tableName 경로 파라미터가 필요합니다.",
|
||||
},
|
||||
};
|
||||
res.status(400).json(response);
|
||||
return;
|
||||
}
|
||||
|
||||
// column_labels에서 reference_table이 현재 테이블인 레코드 조회
|
||||
// input_type이 'entity'인 것만 조회 (실제 FK 관계)
|
||||
const sqlQuery = `
|
||||
SELECT DISTINCT
|
||||
cl.table_name,
|
||||
cl.column_name,
|
||||
cl.column_label,
|
||||
cl.reference_table,
|
||||
cl.reference_column,
|
||||
cl.display_column,
|
||||
cl.table_name as table_label
|
||||
FROM column_labels cl
|
||||
WHERE cl.reference_table = $1
|
||||
AND cl.input_type = 'entity'
|
||||
ORDER BY cl.table_name, cl.column_name
|
||||
`;
|
||||
|
||||
const result = await query(sqlQuery, [tableName]);
|
||||
|
||||
const referencedByTables = result.map((row: any) => ({
|
||||
tableName: row.table_name,
|
||||
tableLabel: row.table_label,
|
||||
columnName: row.column_name,
|
||||
columnLabel: row.column_label,
|
||||
referenceTable: row.reference_table,
|
||||
referenceColumn: row.reference_column || "id",
|
||||
displayColumn: row.display_column,
|
||||
}));
|
||||
|
||||
logger.info(
|
||||
`테이블 참조 관계 조회 완료: ${referencedByTables.length}개 발견`
|
||||
);
|
||||
|
||||
const response: ApiResponse<any> = {
|
||||
success: true,
|
||||
message: `${referencedByTables.length}개의 테이블이 ${tableName}을 참조합니다.`,
|
||||
data: referencedByTables,
|
||||
};
|
||||
|
||||
res.status(200).json(response);
|
||||
} catch (error) {
|
||||
logger.error("테이블 참조 관계 조회 중 오류 발생:", error);
|
||||
|
||||
const response: ApiResponse<null> = {
|
||||
success: false,
|
||||
message: "테이블 참조 관계 조회 중 오류가 발생했습니다.",
|
||||
error: {
|
||||
code: "REFERENCED_BY_ERROR",
|
||||
details: error instanceof Error ? error.message : "Unknown error",
|
||||
},
|
||||
};
|
||||
|
||||
res.status(500).json(response);
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user