조인컬럼수정(조인 컬럼 추가시 엔티티 타입 표시 오류)
This commit is contained in:
@@ -42,9 +42,23 @@ export class EntityJoinService {
|
||||
},
|
||||
});
|
||||
|
||||
logger.info(`🔍 Entity 컬럼 조회 결과: ${entityColumns.length}개 발견`);
|
||||
entityColumns.forEach((col, index) => {
|
||||
logger.info(
|
||||
` ${index + 1}. ${col.column_name} -> ${col.reference_table}.${col.reference_column} (display: ${col.display_column})`
|
||||
);
|
||||
});
|
||||
|
||||
const joinConfigs: EntityJoinConfig[] = [];
|
||||
|
||||
for (const column of entityColumns) {
|
||||
logger.info(`🔍 Entity 컬럼 상세 정보:`, {
|
||||
column_name: column.column_name,
|
||||
reference_table: column.reference_table,
|
||||
reference_column: column.reference_column,
|
||||
display_column: column.display_column,
|
||||
});
|
||||
|
||||
if (
|
||||
!column.column_name ||
|
||||
!column.reference_table ||
|
||||
@@ -58,6 +72,12 @@ export class EntityJoinService {
|
||||
let displayColumns: string[] = [];
|
||||
let separator = " - ";
|
||||
|
||||
logger.info(`🔍 조건 확인 - 컬럼: ${column.column_name}`, {
|
||||
hasScreenConfig: !!screenConfig,
|
||||
hasDisplayColumns: screenConfig?.displayColumns,
|
||||
displayColumn: column.display_column,
|
||||
});
|
||||
|
||||
if (screenConfig && screenConfig.displayColumns) {
|
||||
// 화면에서 설정된 표시 컬럼들 사용 (기본 테이블 + 조인 테이블 조합 지원)
|
||||
displayColumns = screenConfig.displayColumns;
|
||||
@@ -70,9 +90,12 @@ export class EntityJoinService {
|
||||
} else if (column.display_column && column.display_column !== "none") {
|
||||
// 기존 설정된 단일 표시 컬럼 사용 (none이 아닌 경우만)
|
||||
displayColumns = [column.display_column];
|
||||
logger.info(
|
||||
`🔧 기존 display_column 사용: ${column.column_name} → ${column.display_column}`
|
||||
);
|
||||
} else {
|
||||
// 조인 탭에서 보여줄 기본 표시 컬럼 설정
|
||||
// dept_info 테이블의 경우 dept_name을 기본으로 사용
|
||||
// display_column이 "none"이거나 없는 경우 기본 표시 컬럼 설정
|
||||
// 🚨 display_column이 항상 "none"이므로 이 로직을 기본으로 사용
|
||||
let defaultDisplayColumn = column.reference_column;
|
||||
if (column.reference_table === "dept_info") {
|
||||
defaultDisplayColumn = "dept_name";
|
||||
@@ -83,9 +106,10 @@ export class EntityJoinService {
|
||||
}
|
||||
|
||||
displayColumns = [defaultDisplayColumn];
|
||||
console.log(
|
||||
`🔧 조인 탭용 기본 표시 컬럼 설정: ${column.column_name} → ${defaultDisplayColumn} (${column.reference_table})`
|
||||
logger.info(
|
||||
`🔧 Entity 조인 기본 표시 컬럼 설정: ${column.column_name} → ${defaultDisplayColumn} (${column.reference_table})`
|
||||
);
|
||||
logger.info(`🔍 생성된 displayColumns 배열:`, displayColumns);
|
||||
}
|
||||
|
||||
// 별칭 컬럼명 생성 (writer -> writer_name)
|
||||
@@ -102,13 +126,32 @@ export class EntityJoinService {
|
||||
separator: separator,
|
||||
};
|
||||
|
||||
logger.info(`🔧 기본 조인 설정 생성:`, {
|
||||
sourceTable: joinConfig.sourceTable,
|
||||
sourceColumn: joinConfig.sourceColumn,
|
||||
referenceTable: joinConfig.referenceTable,
|
||||
aliasColumn: joinConfig.aliasColumn,
|
||||
displayColumns: joinConfig.displayColumns,
|
||||
});
|
||||
|
||||
// 조인 설정 유효성 검증
|
||||
logger.info(
|
||||
`🔍 조인 설정 검증 중: ${joinConfig.sourceColumn} -> ${joinConfig.referenceTable}`
|
||||
);
|
||||
if (await this.validateJoinConfig(joinConfig)) {
|
||||
joinConfigs.push(joinConfig);
|
||||
logger.info(`✅ 조인 설정 추가됨: ${joinConfig.aliasColumn}`);
|
||||
} else {
|
||||
logger.warn(`❌ 조인 설정 검증 실패: ${joinConfig.sourceColumn}`);
|
||||
}
|
||||
}
|
||||
|
||||
logger.info(`Entity 조인 설정 생성 완료: ${joinConfigs.length}개`);
|
||||
logger.info(`🎯 Entity 조인 설정 생성 완료: ${joinConfigs.length}개`);
|
||||
joinConfigs.forEach((config, index) => {
|
||||
logger.info(
|
||||
` ${index + 1}. ${config.sourceColumn} -> ${config.referenceTable}.${config.referenceColumn} AS ${config.aliasColumn}`
|
||||
);
|
||||
});
|
||||
return joinConfigs;
|
||||
} catch (error) {
|
||||
logger.error(`Entity 조인 감지 실패: ${tableName}`, error);
|
||||
@@ -273,7 +316,7 @@ export class EntityJoinService {
|
||||
.filter(Boolean)
|
||||
.join("\n");
|
||||
|
||||
logger.debug(`생성된 Entity 조인 쿼리:`, query);
|
||||
logger.info(`🔍 생성된 Entity 조인 쿼리:`, query);
|
||||
return {
|
||||
query: query,
|
||||
aliasMap: aliasMap,
|
||||
@@ -303,10 +346,18 @@ export class EntityJoinService {
|
||||
}
|
||||
|
||||
// 참조 테이블의 캐시 가능성 확인
|
||||
const displayCol =
|
||||
config.displayColumn ||
|
||||
config.displayColumns?.[0] ||
|
||||
config.referenceColumn;
|
||||
logger.info(
|
||||
`🔍 캐시 확인용 표시 컬럼: ${config.referenceTable} - ${displayCol}`
|
||||
);
|
||||
|
||||
const cachedData = await referenceCacheService.getCachedReference(
|
||||
config.referenceTable,
|
||||
config.referenceColumn,
|
||||
config.displayColumn || config.displayColumns[0]
|
||||
displayCol
|
||||
);
|
||||
|
||||
return cachedData ? "cache" : "join";
|
||||
@@ -336,6 +387,14 @@ export class EntityJoinService {
|
||||
*/
|
||||
private async validateJoinConfig(config: EntityJoinConfig): Promise<boolean> {
|
||||
try {
|
||||
logger.info("🔍 조인 설정 검증 상세:", {
|
||||
sourceColumn: config.sourceColumn,
|
||||
referenceTable: config.referenceTable,
|
||||
displayColumns: config.displayColumns,
|
||||
displayColumn: config.displayColumn,
|
||||
aliasColumn: config.aliasColumn,
|
||||
});
|
||||
|
||||
// 참조 테이블 존재 확인
|
||||
const tableExists = await prisma.$queryRaw`
|
||||
SELECT 1 FROM information_schema.tables
|
||||
@@ -350,23 +409,32 @@ export class EntityJoinService {
|
||||
|
||||
// 참조 컬럼 존재 확인 (displayColumns[0] 사용)
|
||||
const displayColumn = config.displayColumns?.[0] || config.displayColumn;
|
||||
if (!displayColumn) {
|
||||
logger.warn(`표시 컬럼이 설정되지 않음: ${config.sourceColumn}`);
|
||||
return false;
|
||||
}
|
||||
logger.info(
|
||||
`🔍 표시 컬럼 확인: ${displayColumn} (from displayColumns: ${config.displayColumns}, displayColumn: ${config.displayColumn})`
|
||||
);
|
||||
|
||||
const columnExists = await prisma.$queryRaw`
|
||||
SELECT 1 FROM information_schema.columns
|
||||
WHERE table_name = ${config.referenceTable}
|
||||
AND column_name = ${displayColumn}
|
||||
LIMIT 1
|
||||
`;
|
||||
// 🚨 display_column이 항상 "none"이므로, 표시 컬럼이 없어도 조인 허용
|
||||
if (displayColumn && displayColumn !== "none") {
|
||||
const columnExists = await prisma.$queryRaw`
|
||||
SELECT 1 FROM information_schema.columns
|
||||
WHERE table_name = ${config.referenceTable}
|
||||
AND column_name = ${displayColumn}
|
||||
LIMIT 1
|
||||
`;
|
||||
|
||||
if (!Array.isArray(columnExists) || columnExists.length === 0) {
|
||||
logger.warn(
|
||||
`표시 컬럼이 존재하지 않음: ${config.referenceTable}.${displayColumn}`
|
||||
if (!Array.isArray(columnExists) || columnExists.length === 0) {
|
||||
logger.warn(
|
||||
`표시 컬럼이 존재하지 않음: ${config.referenceTable}.${displayColumn}`
|
||||
);
|
||||
return false;
|
||||
}
|
||||
logger.info(
|
||||
`✅ 표시 컬럼 확인 완료: ${config.referenceTable}.${displayColumn}`
|
||||
);
|
||||
} else {
|
||||
logger.info(
|
||||
`🔧 표시 컬럼 검증 생략: display_column이 none이거나 설정되지 않음`
|
||||
);
|
||||
return false;
|
||||
}
|
||||
|
||||
return true;
|
||||
|
||||
Reference in New Issue
Block a user