feat: 엔티티 타입 컬럼 표시 설정을 화면 편집기로 이동
- 테이블 타입 관리에서 엔티티 타입의 표시 컬럼 설정 완전 제거 - 컬럼 설정 패널에서 엔티티 타입일 때 표시 컬럼 조합 선택 기능 추가 - 기본 테이블과 조인 테이블의 컬럼을 자유롭게 조합 가능 - 구분자 설정 및 실시간 미리보기 기능 포함 - 별도 모달 방식 제거하고 기존 컬럼 설정 패널에 통합
This commit is contained in:
@@ -74,7 +74,10 @@ export class EntityJoinController {
|
||||
typeof screenEntityConfigs === "string"
|
||||
? JSON.parse(screenEntityConfigs)
|
||||
: screenEntityConfigs;
|
||||
logger.info("화면별 엔티티 설정 파싱 완료:", parsedScreenEntityConfigs);
|
||||
logger.info(
|
||||
"화면별 엔티티 설정 파싱 완료:",
|
||||
parsedScreenEntityConfigs
|
||||
);
|
||||
} catch (error) {
|
||||
logger.warn("화면별 엔티티 설정 파싱 오류:", error);
|
||||
parsedScreenEntityConfigs = {};
|
||||
@@ -365,14 +368,16 @@ export class EntityJoinController {
|
||||
);
|
||||
|
||||
// 현재 display_column으로 사용 중인 컬럼 제외
|
||||
const currentDisplayColumn =
|
||||
config.displayColumn || config.displayColumns[0];
|
||||
const availableColumns = columns.filter(
|
||||
(col) => col.columnName !== config.displayColumn
|
||||
(col) => col.columnName !== currentDisplayColumn
|
||||
);
|
||||
|
||||
return {
|
||||
joinConfig: config,
|
||||
tableName: config.referenceTable,
|
||||
currentDisplayColumn: config.displayColumn,
|
||||
currentDisplayColumn: currentDisplayColumn,
|
||||
availableColumns: availableColumns.map((col) => ({
|
||||
columnName: col.columnName,
|
||||
columnLabel: col.displayName || col.columnName,
|
||||
@@ -390,7 +395,8 @@ export class EntityJoinController {
|
||||
return {
|
||||
joinConfig: config,
|
||||
tableName: config.referenceTable,
|
||||
currentDisplayColumn: config.displayColumn,
|
||||
currentDisplayColumn:
|
||||
config.displayColumn || config.displayColumns[0],
|
||||
availableColumns: [],
|
||||
error: error instanceof Error ? error.message : "Unknown error",
|
||||
};
|
||||
|
||||
@@ -20,7 +20,7 @@ export class EntityJoinService {
|
||||
* @param screenEntityConfigs 화면별 엔티티 설정 (선택사항)
|
||||
*/
|
||||
async detectEntityJoins(
|
||||
tableName: string,
|
||||
tableName: string,
|
||||
screenEntityConfigs?: Record<string, any>
|
||||
): Promise<EntityJoinConfig[]> {
|
||||
try {
|
||||
@@ -57,7 +57,7 @@ export class EntityJoinService {
|
||||
const screenConfig = screenEntityConfigs?.[column.column_name];
|
||||
let displayColumns: string[] = [];
|
||||
let separator = " - ";
|
||||
|
||||
|
||||
if (screenConfig && screenConfig.displayColumns) {
|
||||
// 화면에서 설정된 표시 컬럼들 사용
|
||||
displayColumns = screenConfig.displayColumns;
|
||||
@@ -66,8 +66,11 @@ export class EntityJoinService {
|
||||
// 기존 설정된 단일 표시 컬럼 사용
|
||||
displayColumns = [column.display_column];
|
||||
} else {
|
||||
// 기본값: reference_column 사용
|
||||
displayColumns = [column.reference_column];
|
||||
// 화면에서 설정하도록 빈 배열로 초기화 (테이블 타입 관리에서 표시 컬럼 설정 제거)
|
||||
displayColumns = [];
|
||||
console.log(
|
||||
`🎯 표시 컬럼을 화면에서 설정하도록 초기화: ${column.column_name} (테이블 타입 관리에서 표시 컬럼 설정 제거됨)`
|
||||
);
|
||||
}
|
||||
|
||||
// 별칭 컬럼명 생성 (writer -> writer_name)
|
||||
@@ -153,16 +156,18 @@ export class EntityJoinService {
|
||||
const joinColumns = joinConfigs
|
||||
.map((config) => {
|
||||
const alias = aliasMap.get(config.referenceTable);
|
||||
const displayColumns = config.displayColumns || [config.displayColumn];
|
||||
const displayColumns = config.displayColumns || [
|
||||
config.displayColumn,
|
||||
];
|
||||
const separator = config.separator || " - ";
|
||||
|
||||
|
||||
if (displayColumns.length === 1) {
|
||||
// 단일 컬럼인 경우
|
||||
return `COALESCE(${alias}.${displayColumns[0]}, '') AS ${config.aliasColumn}`;
|
||||
} else {
|
||||
// 여러 컬럼인 경우 CONCAT으로 연결
|
||||
const concatParts = displayColumns
|
||||
.map(col => `COALESCE(${alias}.${col}, '')`)
|
||||
.map((col) => `COALESCE(${alias}.${col}, '')`)
|
||||
.join(`, '${separator}', `);
|
||||
return `CONCAT(${concatParts}) AS ${config.aliasColumn}`;
|
||||
}
|
||||
@@ -236,7 +241,7 @@ export class EntityJoinService {
|
||||
const cachedData = await referenceCacheService.getCachedReference(
|
||||
config.referenceTable,
|
||||
config.referenceColumn,
|
||||
config.displayColumn
|
||||
config.displayColumn || config.displayColumns[0]
|
||||
);
|
||||
|
||||
return cachedData ? "cache" : "join";
|
||||
|
||||
@@ -2044,7 +2044,10 @@ export class TableManagementService {
|
||||
}
|
||||
|
||||
// Entity 조인 설정 감지 (화면별 엔티티 설정 전달)
|
||||
let joinConfigs = await entityJoinService.detectEntityJoins(tableName, options.screenEntityConfigs);
|
||||
let joinConfigs = await entityJoinService.detectEntityJoins(
|
||||
tableName,
|
||||
options.screenEntityConfigs
|
||||
);
|
||||
|
||||
// 추가 조인 컬럼 정보가 있으면 조인 설정에 추가
|
||||
if (
|
||||
@@ -2068,8 +2071,10 @@ export class TableManagementService {
|
||||
sourceColumn: baseJoinConfig.sourceColumn, // 원본 컬럼 (writer)
|
||||
referenceTable: additionalColumn.sourceTable, // 참조 테이블 (user_info)
|
||||
referenceColumn: baseJoinConfig.referenceColumn, // 참조 키 (user_id)
|
||||
displayColumn: additionalColumn.sourceColumn, // 표시할 컬럼 (email)
|
||||
displayColumns: [additionalColumn.sourceColumn], // 표시할 컬럼들 (email)
|
||||
displayColumn: additionalColumn.sourceColumn, // 하위 호환성
|
||||
aliasColumn: additionalColumn.joinAlias, // 별칭 (writer_email)
|
||||
separator: " - ", // 기본 구분자
|
||||
};
|
||||
|
||||
joinConfigs.push(additionalJoinConfig);
|
||||
@@ -2243,7 +2248,7 @@ export class TableManagementService {
|
||||
await referenceCacheService.getCachedReference(
|
||||
config.referenceTable,
|
||||
config.referenceColumn,
|
||||
config.displayColumn
|
||||
config.displayColumn || config.displayColumns[0]
|
||||
);
|
||||
}
|
||||
|
||||
@@ -2430,7 +2435,7 @@ export class TableManagementService {
|
||||
const lookupValue = referenceCacheService.getLookupValue(
|
||||
config.referenceTable,
|
||||
config.referenceColumn,
|
||||
config.displayColumn,
|
||||
config.displayColumn || config.displayColumns[0],
|
||||
String(sourceValue)
|
||||
);
|
||||
|
||||
@@ -2724,7 +2729,7 @@ export class TableManagementService {
|
||||
const cachedData = await referenceCacheService.getCachedReference(
|
||||
config.referenceTable,
|
||||
config.referenceColumn,
|
||||
config.displayColumn
|
||||
config.displayColumn || config.displayColumns[0]
|
||||
);
|
||||
|
||||
if (cachedData && cachedData.size > 0) {
|
||||
@@ -2808,7 +2813,7 @@ export class TableManagementService {
|
||||
const cachedData = await referenceCacheService.getCachedReference(
|
||||
config.referenceTable,
|
||||
config.referenceColumn,
|
||||
config.displayColumn
|
||||
config.displayColumn || config.displayColumns[0]
|
||||
);
|
||||
|
||||
if (cachedData) {
|
||||
@@ -2847,7 +2852,7 @@ export class TableManagementService {
|
||||
const hitRate = referenceCacheService.getCacheHitRate(
|
||||
config.referenceTable,
|
||||
config.referenceColumn,
|
||||
config.displayColumn
|
||||
config.displayColumn || config.displayColumns[0]
|
||||
);
|
||||
totalHitRate += hitRate;
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user