webtype 엔티티 수정
This commit is contained in:
@@ -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]),
|
||||
})
|
||||
);
|
||||
|
||||
|
||||
Reference in New Issue
Block a user