webtype 엔티티 수정

This commit is contained in:
2025-09-21 10:28:15 +09:00
parent 43e335d271
commit 33600ce667
2 changed files with 68 additions and 14 deletions

View File

@@ -53,29 +53,65 @@ export class EntityReferenceController {
});
}
// detailSettings에서 참조 테이블 정보 추출
let referenceTable = "";
let displayColumn = "name";
// column_labels에서 참조 테이블 정보 가져오기
let referenceTable = columnInfo.reference_table || "";
let referenceColumn = columnInfo.reference_column || "";
let displayColumn = "name"; // 기본 표시 컬럼
// detailSettings에서 displayColumn 정보 추출
try {
if (columnInfo.detail_settings) {
const detailSettings = JSON.parse(columnInfo.detail_settings);
referenceTable = detailSettings.referenceTable || "";
displayColumn = detailSettings.displayColumn || "name";
displayColumn = detailSettings.displayColumn || displayColumn;
}
} catch (error) {
logger.warn("detailSettings 파싱 실패:", error);
}
// reference_table이 없는 경우 컬럼명 기반으로 추론
if (!referenceTable) {
if (columnName.endsWith("_code")) {
// dept_code -> dept_info
const baseTableName = columnName.replace("_code", "_info");
referenceTable = baseTableName;
referenceColumn = columnName; // dept_code
logger.info(`참조 테이블 추론: ${columnName} -> ${referenceTable}`);
} else if (columnName.endsWith("_id")) {
// user_id -> user_info
const baseTableName = columnName.replace("_id", "_info");
referenceTable = baseTableName;
referenceColumn = columnName; // user_id
logger.info(`참조 테이블 추론: ${columnName} -> ${referenceTable}`);
}
}
if (!referenceTable) {
return res.status(400).json({
success: false,
message: `컬럼 '${columnName}'에 참조 테이블이 설정되지 않았습니다.`,
message: `컬럼 '${tableName}.${columnName}'에 참조 테이블이 설정되지 않았습니다.`,
});
}
// 테이블별 적절한 표시 컬럼 설정
if (referenceTable === "dept_info") {
displayColumn = "dept_name";
} else if (referenceTable === "user_info") {
displayColumn = "user_name";
}
// referenceColumn이 없으면 테이블별 Primary Key로 설정
if (!referenceColumn) {
if (referenceTable === "dept_info") {
referenceColumn = "dept_code";
} else if (referenceTable === "user_info") {
referenceColumn = "user_id";
} else {
referenceColumn = "id"; // 기본값
}
}
// 동적 쿼리로 참조 데이터 조회
let query = `SELECT id, ${displayColumn} as display_name FROM ${referenceTable}`;
let query = `SELECT ${referenceColumn}, ${displayColumn} as display_name FROM ${referenceTable}`;
const queryParams: any[] = [];
// 검색 조건 추가
@@ -87,13 +123,20 @@ export class EntityReferenceController {
query += ` ORDER BY ${displayColumn} LIMIT $${queryParams.length + 1}`;
queryParams.push(Number(limit));
logger.info(`실행할 쿼리: ${query}`, {
queryParams,
referenceTable,
referenceColumn,
displayColumn,
});
const referenceData = await prisma.$queryRawUnsafe(query, ...queryParams);
// 옵션 형태로 변환
const options: EntityReferenceOption[] = (referenceData as any[]).map(
(row) => ({
value: String(row.id),
label: String(row.display_name || row.id),
value: String(row[referenceColumn]),
label: String(row.display_name || row[referenceColumn]),
})
);