테이블 추가기능 수정사항
This commit is contained in:
@@ -329,7 +329,7 @@ export class TableManagementService {
|
||||
},
|
||||
update: {
|
||||
column_label: settings.columnLabel,
|
||||
web_type: settings.webType,
|
||||
input_type: settings.inputType,
|
||||
detail_settings: settings.detailSettings,
|
||||
code_category: settings.codeCategory,
|
||||
code_value: settings.codeValue,
|
||||
@@ -345,7 +345,7 @@ export class TableManagementService {
|
||||
table_name: tableName,
|
||||
column_name: columnName,
|
||||
column_label: settings.columnLabel,
|
||||
web_type: settings.webType,
|
||||
input_type: settings.inputType,
|
||||
detail_settings: settings.detailSettings,
|
||||
code_category: settings.codeCategory,
|
||||
code_value: settings.codeValue,
|
||||
@@ -626,7 +626,123 @@ export class TableManagementService {
|
||||
}
|
||||
|
||||
/**
|
||||
* 웹 타입별 기본 상세 설정 생성
|
||||
* 컬럼 입력 타입 설정 (새로운 시스템)
|
||||
*/
|
||||
async updateColumnInputType(
|
||||
tableName: string,
|
||||
columnName: string,
|
||||
inputType: string,
|
||||
detailSettings?: Record<string, any>
|
||||
): Promise<void> {
|
||||
try {
|
||||
logger.info(
|
||||
`컬럼 입력 타입 설정 시작: ${tableName}.${columnName} = ${inputType}`
|
||||
);
|
||||
|
||||
// 입력 타입별 기본 상세 설정 생성
|
||||
const defaultDetailSettings =
|
||||
this.generateDefaultInputTypeSettings(inputType);
|
||||
|
||||
// 사용자 정의 설정과 기본 설정 병합
|
||||
const finalDetailSettings = {
|
||||
...defaultDetailSettings,
|
||||
...detailSettings,
|
||||
};
|
||||
|
||||
// table_type_columns 테이블에서 업데이트
|
||||
await prisma.$executeRaw`
|
||||
INSERT INTO table_type_columns (
|
||||
table_name, column_name, input_type, detail_settings,
|
||||
is_nullable, display_order, created_date, updated_date
|
||||
) VALUES (
|
||||
${tableName}, ${columnName}, ${inputType}, ${JSON.stringify(finalDetailSettings)},
|
||||
'Y', 0, now(), now()
|
||||
)
|
||||
ON CONFLICT (table_name, column_name)
|
||||
DO UPDATE SET
|
||||
input_type = ${inputType},
|
||||
detail_settings = ${JSON.stringify(finalDetailSettings)},
|
||||
updated_date = now();
|
||||
`;
|
||||
|
||||
logger.info(
|
||||
`컬럼 입력 타입 설정 완료: ${tableName}.${columnName} = ${inputType}`
|
||||
);
|
||||
} catch (error) {
|
||||
logger.error(
|
||||
`컬럼 입력 타입 설정 실패: ${tableName}.${columnName}`,
|
||||
error
|
||||
);
|
||||
throw new Error(
|
||||
`컬럼 입력 타입 설정 실패: ${error instanceof Error ? error.message : "Unknown error"}`
|
||||
);
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 입력 타입별 기본 상세 설정 생성
|
||||
*/
|
||||
private generateDefaultInputTypeSettings(
|
||||
inputType: string
|
||||
): Record<string, any> {
|
||||
switch (inputType) {
|
||||
case "text":
|
||||
return {
|
||||
maxLength: 500,
|
||||
placeholder: "텍스트를 입력하세요",
|
||||
};
|
||||
|
||||
case "number":
|
||||
return {
|
||||
min: 0,
|
||||
step: 1,
|
||||
placeholder: "숫자를 입력하세요",
|
||||
};
|
||||
|
||||
case "date":
|
||||
return {
|
||||
format: "YYYY-MM-DD",
|
||||
placeholder: "날짜를 선택하세요",
|
||||
};
|
||||
|
||||
case "code":
|
||||
return {
|
||||
placeholder: "코드를 선택하세요",
|
||||
searchable: true,
|
||||
};
|
||||
|
||||
case "entity":
|
||||
return {
|
||||
placeholder: "항목을 선택하세요",
|
||||
searchable: true,
|
||||
};
|
||||
|
||||
case "select":
|
||||
return {
|
||||
placeholder: "선택하세요",
|
||||
searchable: false,
|
||||
};
|
||||
|
||||
case "checkbox":
|
||||
return {
|
||||
defaultChecked: false,
|
||||
trueValue: "Y",
|
||||
falseValue: "N",
|
||||
};
|
||||
|
||||
case "radio":
|
||||
return {
|
||||
inline: false,
|
||||
};
|
||||
|
||||
default:
|
||||
return {};
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 웹 타입별 기본 상세 설정 생성 (레거시 지원)
|
||||
* @deprecated generateDefaultInputTypeSettings 사용 권장
|
||||
*/
|
||||
private generateDefaultDetailSettings(webType: string): Record<string, any> {
|
||||
switch (webType) {
|
||||
@@ -2363,22 +2479,21 @@ export class TableManagementService {
|
||||
}
|
||||
|
||||
/**
|
||||
* 컬럼 웹타입 정보 조회 (화면관리 연동용)
|
||||
* 컬럼 입력타입 정보 조회 (화면관리 연동용)
|
||||
*/
|
||||
async getColumnWebTypes(tableName: string): Promise<ColumnTypeInfo[]> {
|
||||
async getColumnInputTypes(tableName: string): Promise<ColumnTypeInfo[]> {
|
||||
try {
|
||||
logger.info(`컬럼 웹타입 정보 조회: ${tableName}`);
|
||||
logger.info(`컬럼 입력타입 정보 조회: ${tableName}`);
|
||||
|
||||
// table_type_columns에서 웹타입 정보 조회
|
||||
const rawWebTypes = await prisma.$queryRaw<any[]>`
|
||||
// table_type_columns에서 입력타입 정보 조회
|
||||
const rawInputTypes = await prisma.$queryRaw<any[]>`
|
||||
SELECT
|
||||
ttc.column_name as "columnName",
|
||||
ttc.column_name as "displayName",
|
||||
COALESCE(ttc.web_type, 'text') as "webType",
|
||||
COALESCE(ttc.input_type, 'text') as "inputType",
|
||||
COALESCE(ttc.detail_settings, '{}') as "detailSettings",
|
||||
ttc.is_nullable as "isNullable",
|
||||
ic.data_type as "dataType",
|
||||
ic.udt_name as "dbType"
|
||||
ic.data_type as "dataType"
|
||||
FROM table_type_columns ttc
|
||||
LEFT JOIN information_schema.columns ic
|
||||
ON ttc.table_name = ic.table_name AND ttc.column_name = ic.column_name
|
||||
@@ -2386,14 +2501,12 @@ export class TableManagementService {
|
||||
ORDER BY ttc.display_order, ttc.column_name
|
||||
`;
|
||||
|
||||
const webTypes: ColumnTypeInfo[] = rawWebTypes.map((col) => ({
|
||||
const inputTypes: ColumnTypeInfo[] = rawInputTypes.map((col) => ({
|
||||
tableName: tableName,
|
||||
columnName: col.columnName,
|
||||
displayName: col.displayName,
|
||||
dataType: col.dataType || "text",
|
||||
dbType: col.dbType || "text",
|
||||
webType: col.webType,
|
||||
inputType: "direct",
|
||||
dataType: col.dataType || "varchar",
|
||||
inputType: col.inputType,
|
||||
detailSettings: col.detailSettings,
|
||||
description: "", // 필수 필드 추가
|
||||
isNullable: col.isNullable,
|
||||
@@ -2403,15 +2516,26 @@ export class TableManagementService {
|
||||
}));
|
||||
|
||||
logger.info(
|
||||
`컬럼 웹타입 정보 조회 완료: ${tableName}, ${webTypes.length}개 컬럼`
|
||||
`컬럼 입력타입 정보 조회 완료: ${tableName}, ${inputTypes.length}개 컬럼`
|
||||
);
|
||||
return webTypes;
|
||||
return inputTypes;
|
||||
} catch (error) {
|
||||
logger.error(`컬럼 웹타입 정보 조회 실패: ${tableName}`, error);
|
||||
logger.error(`컬럼 입력타입 정보 조회 실패: ${tableName}`, error);
|
||||
throw error;
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* 레거시 지원: 컬럼 웹타입 정보 조회
|
||||
* @deprecated getColumnInputTypes 사용 권장
|
||||
*/
|
||||
async getColumnWebTypes(tableName: string): Promise<ColumnTypeInfo[]> {
|
||||
logger.warn(
|
||||
`레거시 메서드 사용: getColumnWebTypes → getColumnInputTypes 사용 권장`
|
||||
);
|
||||
return this.getColumnInputTypes(tableName);
|
||||
}
|
||||
|
||||
/**
|
||||
* 데이터베이스 연결 상태 확인
|
||||
*/
|
||||
|
||||
Reference in New Issue
Block a user