조인테이블의 컬럼 사용할 수 있도록 수정

This commit is contained in:
kjs
2025-09-16 18:02:19 +09:00
parent 1d05965a55
commit 049d8ed295
8 changed files with 523 additions and 9 deletions

View File

@@ -1412,6 +1412,11 @@ export class TableManagementService {
sortBy?: string;
sortOrder?: string;
enableEntityJoin?: boolean;
additionalJoinColumns?: Array<{
sourceTable: string;
sourceColumn: string;
joinAlias: string;
}>;
}
): Promise<EntityJoinResponse> {
const startTime = Date.now();
@@ -1432,7 +1437,41 @@ export class TableManagementService {
}
// Entity 조인 설정 감지
const joinConfigs = await entityJoinService.detectEntityJoins(tableName);
let joinConfigs = await entityJoinService.detectEntityJoins(tableName);
// 추가 조인 컬럼 정보가 있으면 조인 설정에 추가
if (
options.additionalJoinColumns &&
options.additionalJoinColumns.length > 0
) {
logger.info(
`추가 조인 컬럼 처리: ${options.additionalJoinColumns.length}`
);
for (const additionalColumn of options.additionalJoinColumns) {
// 기존 조인 설정에서 같은 참조 테이블을 사용하는 설정 찾기
const baseJoinConfig = joinConfigs.find(
(config) => config.referenceTable === additionalColumn.sourceTable
);
if (baseJoinConfig) {
// 추가 조인 컬럼 설정 생성
const additionalJoinConfig: EntityJoinConfig = {
sourceTable: tableName,
sourceColumn: baseJoinConfig.sourceColumn, // 원본 컬럼 (writer)
referenceTable: additionalColumn.sourceTable, // 참조 테이블 (user_info)
referenceColumn: baseJoinConfig.referenceColumn, // 참조 키 (user_id)
displayColumn: additionalColumn.sourceColumn, // 표시할 컬럼 (email)
aliasColumn: additionalColumn.joinAlias, // 별칭 (writer_email)
};
joinConfigs.push(additionalJoinConfig);
logger.info(
`추가 조인 컬럼 설정 추가: ${additionalJoinConfig.aliasColumn}`
);
}
}
}
if (joinConfigs.length === 0) {
logger.info(`Entity 조인 설정이 없음: ${tableName}`);
@@ -1624,7 +1663,11 @@ export class TableManagementService {
String(sourceValue)
);
enhancedRow[config.aliasColumn] = lookupValue || sourceValue;
// null이나 undefined인 경우 빈 문자열로 설정
enhancedRow[config.aliasColumn] = lookupValue || "";
} else {
// sourceValue가 없는 경우도 빈 문자열로 설정
enhancedRow[config.aliasColumn] = "";
}
}
@@ -1946,11 +1989,18 @@ export class TableManagementService {
const keyValue = row[config.sourceColumn];
if (keyValue) {
const lookupValue = cachedData.get(String(keyValue));
if (lookupValue) {
row[config.aliasColumn] = lookupValue;
}
// null이나 undefined인 경우 빈 문자열로 설정
row[config.aliasColumn] = lookupValue || "";
} else {
// sourceValue가 없는 경우도 빈 문자열로 설정
row[config.aliasColumn] = "";
}
});
} else {
// 캐시가 없는 경우 모든 행에 빈 문자열 설정
enhancedData.forEach((row) => {
row[config.aliasColumn] = "";
});
}
}