refactor: Update table schema retrieval to prioritize company-specific labels
- Modified the `getTableSchema` function in `adminController.ts` to use company-specific column labels when available, falling back to common labels if not. - Adjusted the SQL query to join `table_type_columns` for both company-specific and common labels, ensuring the correct display order is maintained. - Removed unnecessary component count display in the `TabsDesignEditor` to streamline the UI. These changes enhance the accuracy of the table schema representation based on company context and improve the overall user interface by simplifying tab displays.
This commit is contained in:
parent
4f8c31c893
commit
c0eab878a1
|
|
@ -3564,6 +3564,7 @@ export async function getTableSchema(
|
||||||
logger.info("테이블 스키마 조회", { tableName, companyCode });
|
logger.info("테이블 스키마 조회", { tableName, companyCode });
|
||||||
|
|
||||||
// information_schema와 table_type_columns를 JOIN하여 컬럼 정보와 라벨 정보 함께 가져오기
|
// information_schema와 table_type_columns를 JOIN하여 컬럼 정보와 라벨 정보 함께 가져오기
|
||||||
|
// 회사별 라벨 우선, 없으면 공통(*) 라벨 사용
|
||||||
const schemaQuery = `
|
const schemaQuery = `
|
||||||
SELECT
|
SELECT
|
||||||
ic.column_name,
|
ic.column_name,
|
||||||
|
|
@ -3573,19 +3574,23 @@ export async function getTableSchema(
|
||||||
ic.character_maximum_length,
|
ic.character_maximum_length,
|
||||||
ic.numeric_precision,
|
ic.numeric_precision,
|
||||||
ic.numeric_scale,
|
ic.numeric_scale,
|
||||||
ttc.column_label,
|
COALESCE(ttc_company.column_label, ttc_common.column_label) AS column_label,
|
||||||
ttc.display_order
|
COALESCE(ttc_company.display_order, ttc_common.display_order) AS display_order
|
||||||
FROM information_schema.columns ic
|
FROM information_schema.columns ic
|
||||||
LEFT JOIN table_type_columns ttc
|
LEFT JOIN table_type_columns ttc_common
|
||||||
ON ttc.table_name = ic.table_name
|
ON ttc_common.table_name = ic.table_name
|
||||||
AND ttc.column_name = ic.column_name
|
AND ttc_common.column_name = ic.column_name
|
||||||
AND ttc.company_code = '*'
|
AND ttc_common.company_code = '*'
|
||||||
|
LEFT JOIN table_type_columns ttc_company
|
||||||
|
ON ttc_company.table_name = ic.table_name
|
||||||
|
AND ttc_company.column_name = ic.column_name
|
||||||
|
AND ttc_company.company_code = $2
|
||||||
WHERE ic.table_schema = 'public'
|
WHERE ic.table_schema = 'public'
|
||||||
AND ic.table_name = $1
|
AND ic.table_name = $1
|
||||||
ORDER BY COALESCE(ttc.display_order, ic.ordinal_position), ic.ordinal_position
|
ORDER BY COALESCE(ttc_company.display_order, ttc_common.display_order, ic.ordinal_position), ic.ordinal_position
|
||||||
`;
|
`;
|
||||||
|
|
||||||
const columns = await query<any>(schemaQuery, [tableName]);
|
const columns = await query<any>(schemaQuery, [tableName, companyCode]);
|
||||||
|
|
||||||
if (columns.length === 0) {
|
if (columns.length === 0) {
|
||||||
res.status(404).json({
|
res.status(404).json({
|
||||||
|
|
|
||||||
|
|
@ -295,11 +295,6 @@ const TabsDesignEditor: React.FC<{
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{tab.label || "탭"}
|
{tab.label || "탭"}
|
||||||
{tab.components && tab.components.length > 0 && (
|
|
||||||
<span className="ml-1 text-xs text-muted-foreground">
|
|
||||||
({tab.components.length})
|
|
||||||
</span>
|
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
))
|
))
|
||||||
) : (
|
) : (
|
||||||
|
|
@ -649,11 +644,6 @@ ComponentRegistry.registerComponent({
|
||||||
}}
|
}}
|
||||||
>
|
>
|
||||||
{tab.label || "탭"}
|
{tab.label || "탭"}
|
||||||
{tab.components && tab.components.length > 0 && (
|
|
||||||
<span className="ml-1 text-xs text-muted-foreground">
|
|
||||||
({tab.components.length})
|
|
||||||
</span>
|
|
||||||
)}
|
|
||||||
</div>
|
</div>
|
||||||
))
|
))
|
||||||
) : (
|
) : (
|
||||||
|
|
|
||||||
Loading…
Reference in New Issue