feat: writer 컬럼 자동 user_name 변환 기능 추가
- 문제: 테이블 리스트에서 writer 컬럼이 user_id로 표시됨 - 해결: 1. 백엔드: entityJoinService에서 writer 컬럼 자동 감지 2. writer 컬럼 발견 시 user_info 테이블과 자동 조인 3. writer_name 별칭으로 user_name 반환 4. 프론트엔드: writer 컬럼일 때 writer_name 우선 표시 - 영향: - writer 컬럼이 있는 모든 테이블에서 자동으로 작성자명 표시 - 기존 entity 조인 설정과 충돌 없이 작동 - column_labels 설정 불필요
This commit is contained in:
parent
0e95f8ed66
commit
ccbb6924c8
|
|
@ -49,6 +49,39 @@ export class EntityJoinService {
|
|||
|
||||
const joinConfigs: EntityJoinConfig[] = [];
|
||||
|
||||
// 🎯 writer 컬럼 자동 감지 및 조인 설정 추가
|
||||
const tableColumns = await query<{ column_name: string }>(
|
||||
`SELECT column_name
|
||||
FROM information_schema.columns
|
||||
WHERE table_name = $1
|
||||
AND table_schema = 'public'
|
||||
AND column_name = 'writer'`,
|
||||
[tableName]
|
||||
);
|
||||
|
||||
if (tableColumns.length > 0) {
|
||||
logger.info(`✅ writer 컬럼 발견: ${tableName}.writer -> user_info.user_id`);
|
||||
|
||||
const writerJoinConfig: EntityJoinConfig = {
|
||||
sourceTable: tableName,
|
||||
sourceColumn: "writer",
|
||||
referenceTable: "user_info",
|
||||
referenceColumn: "user_id",
|
||||
displayColumns: ["user_name"],
|
||||
displayColumn: "user_name",
|
||||
aliasColumn: "writer_name",
|
||||
separator: " - ",
|
||||
};
|
||||
|
||||
// 조인 설정 유효성 검증
|
||||
if (await this.validateJoinConfig(writerJoinConfig)) {
|
||||
joinConfigs.push(writerJoinConfig);
|
||||
logger.info(`✅ writer 컬럼 조인 설정 추가됨: writer_name`);
|
||||
} else {
|
||||
logger.warn(`❌ writer 컬럼 조인 설정 검증 실패`);
|
||||
}
|
||||
}
|
||||
|
||||
for (const column of entityColumns) {
|
||||
logger.info(`🔍 Entity 컬럼 상세 정보:`, {
|
||||
column_name: column.column_name,
|
||||
|
|
|
|||
|
|
@ -634,15 +634,9 @@ export default function ScreenDesigner({ selectedScreen, onBackToList }: ScreenD
|
|||
}
|
||||
}
|
||||
|
||||
console.log("🔍 최종 newComp:", { id: newComp.id, size: newComp.size, path });
|
||||
return newComp;
|
||||
});
|
||||
|
||||
console.log(
|
||||
"🔍 updatedComponents:",
|
||||
updatedComponents.map((c) => ({ id: c.id, size: c.size })),
|
||||
);
|
||||
|
||||
// 🔥 새로운 layout 생성
|
||||
const newLayout = { ...prevLayout, components: updatedComponents };
|
||||
|
||||
|
|
|
|||
|
|
@ -1062,6 +1062,11 @@ export const TableListComponent: React.FC<TableListComponentProps> = ({
|
|||
(value: any, column: ColumnConfig, rowData?: Record<string, any>) => {
|
||||
if (value === null || value === undefined) return "-";
|
||||
|
||||
// 🎯 writer 컬럼 자동 변환: user_id -> user_name
|
||||
if (column.columnName === "writer" && rowData && rowData.writer_name) {
|
||||
return rowData.writer_name;
|
||||
}
|
||||
|
||||
// 🎯 엔티티 컬럼 표시 설정이 있는 경우
|
||||
if (column.entityDisplayConfig && rowData) {
|
||||
// displayColumns 또는 selectedColumns 둘 다 체크
|
||||
|
|
|
|||
Loading…
Reference in New Issue