Merge branch 'gbpark-node' of http://39.117.244.52:3000/kjs/ERP-node into jskim-node
This commit is contained in:
@@ -2058,6 +2058,119 @@ export const getScreenSubTables = async (req: AuthenticatedRequest, res: Respons
|
||||
});
|
||||
});
|
||||
|
||||
// 6. v2-repeater 컴포넌트에서 selectedTable/foreignKey 추출
|
||||
const v2RepeaterQuery = `
|
||||
SELECT DISTINCT
|
||||
sd.screen_id,
|
||||
sd.screen_name,
|
||||
sd.table_name as main_table,
|
||||
comp->'overrides'->>'type' as component_type,
|
||||
comp->'overrides'->>'selectedTable' as sub_table,
|
||||
comp->'overrides'->>'foreignKey' as foreign_key,
|
||||
comp->'overrides'->>'parentTable' as parent_table
|
||||
FROM screen_definitions sd
|
||||
JOIN screen_layouts_v2 slv2 ON sd.screen_id = slv2.screen_id,
|
||||
jsonb_array_elements(slv2.layout_data->'components') as comp
|
||||
WHERE sd.screen_id = ANY($1)
|
||||
AND comp->'overrides'->>'type' = 'v2-repeater'
|
||||
AND comp->'overrides'->>'selectedTable' IS NOT NULL
|
||||
`;
|
||||
const v2RepeaterResult = await pool.query(v2RepeaterQuery, [screenIds]);
|
||||
v2RepeaterResult.rows.forEach((row: any) => {
|
||||
const screenId = row.screen_id;
|
||||
const mainTable = row.main_table;
|
||||
const subTable = row.sub_table;
|
||||
const foreignKey = row.foreign_key;
|
||||
if (!subTable || subTable === mainTable) return;
|
||||
if (!screenSubTables[screenId]) {
|
||||
screenSubTables[screenId] = {
|
||||
screenId,
|
||||
screenName: row.screen_name,
|
||||
mainTable: mainTable || '',
|
||||
subTables: [],
|
||||
};
|
||||
}
|
||||
const exists = screenSubTables[screenId].subTables.some(
|
||||
(st) => st.tableName === subTable
|
||||
);
|
||||
if (!exists) {
|
||||
screenSubTables[screenId].subTables.push({
|
||||
tableName: subTable,
|
||||
componentType: 'v2-repeater',
|
||||
relationType: 'rightPanelRelation',
|
||||
fieldMappings: foreignKey ? [{
|
||||
sourceField: 'id',
|
||||
targetField: foreignKey,
|
||||
sourceDisplayName: 'ID',
|
||||
targetDisplayName: foreignKey,
|
||||
}] : undefined,
|
||||
});
|
||||
}
|
||||
});
|
||||
logger.info("v2-repeater 서브 테이블 추출 완료", {
|
||||
screenIds,
|
||||
v2RepeaterCount: v2RepeaterResult.rows.length,
|
||||
});
|
||||
|
||||
// 7. rightPanel.components 내부의 componentConfig.detailTable 추출 (v2-bom-tree 등)
|
||||
const v2DetailTableQuery = `
|
||||
SELECT DISTINCT
|
||||
sd.screen_id,
|
||||
sd.screen_name,
|
||||
sd.table_name as main_table,
|
||||
inner_comp->>'type' as component_type,
|
||||
inner_comp->'componentConfig'->>'detailTable' as sub_table,
|
||||
inner_comp->'componentConfig'->>'foreignKey' as foreign_key
|
||||
FROM screen_definitions sd
|
||||
JOIN screen_layouts_v2 slv2 ON sd.screen_id = slv2.screen_id,
|
||||
jsonb_array_elements(slv2.layout_data->'components') as comp,
|
||||
jsonb_array_elements(
|
||||
COALESCE(
|
||||
comp->'overrides'->'rightPanel'->'components',
|
||||
comp->'overrides'->'leftPanel'->'components',
|
||||
'[]'::jsonb
|
||||
)
|
||||
) as inner_comp
|
||||
WHERE sd.screen_id = ANY($1)
|
||||
AND inner_comp->'componentConfig'->>'detailTable' IS NOT NULL
|
||||
`;
|
||||
const v2DetailTableResult = await pool.query(v2DetailTableQuery, [screenIds]);
|
||||
v2DetailTableResult.rows.forEach((row: any) => {
|
||||
const screenId = row.screen_id;
|
||||
const mainTable = row.main_table;
|
||||
const subTable = row.sub_table;
|
||||
const foreignKey = row.foreign_key;
|
||||
if (!subTable || subTable === mainTable) return;
|
||||
if (!screenSubTables[screenId]) {
|
||||
screenSubTables[screenId] = {
|
||||
screenId,
|
||||
screenName: row.screen_name,
|
||||
mainTable: mainTable || '',
|
||||
subTables: [],
|
||||
};
|
||||
}
|
||||
const exists = screenSubTables[screenId].subTables.some(
|
||||
(st) => st.tableName === subTable
|
||||
);
|
||||
if (!exists) {
|
||||
screenSubTables[screenId].subTables.push({
|
||||
tableName: subTable,
|
||||
componentType: row.component_type || 'v2-bom-tree',
|
||||
relationType: 'rightPanelRelation',
|
||||
fieldMappings: foreignKey ? [{
|
||||
sourceField: 'id',
|
||||
targetField: foreignKey,
|
||||
sourceDisplayName: 'ID',
|
||||
targetDisplayName: foreignKey,
|
||||
}] : undefined,
|
||||
});
|
||||
}
|
||||
});
|
||||
logger.info("v2-bom-tree/detailTable 서브 테이블 추출 완료", {
|
||||
screenIds,
|
||||
v2DetailTableCount: v2DetailTableResult.rows.length,
|
||||
});
|
||||
|
||||
// ============================================================
|
||||
// 저장 테이블 정보 추출
|
||||
// ============================================================
|
||||
|
||||
Reference in New Issue
Block a user