생성된 관계도 확인

This commit is contained in:
hyeonsu
2025-09-09 11:35:05 +09:00
parent 989c118ad2
commit 7260ad733b
8 changed files with 1018 additions and 107 deletions

View File

@@ -729,4 +729,164 @@ export class DataflowService {
throw error;
}
}
/**
* 관계도 그룹 목록 조회 (관계도 이름별로 그룹화)
*/
async getDataFlowDiagrams(
companyCode: string,
page: number = 1,
size: number = 20,
searchTerm: string = ""
) {
try {
logger.info(
`DataflowService: 관계도 목록 조회 시작 - ${companyCode}, page: ${page}, size: ${size}, search: ${searchTerm}`
);
// 관계도 이름별로 그룹화하여 조회
const whereCondition = {
company_code: companyCode,
is_active: "Y",
...(searchTerm && {
OR: [
{
relationship_name: {
contains: searchTerm,
mode: "insensitive" as any,
},
},
{
from_table_name: {
contains: searchTerm,
mode: "insensitive" as any,
},
},
{
to_table_name: {
contains: searchTerm,
mode: "insensitive" as any,
},
},
],
}),
};
// 관계도별로 그룹화된 데이터 조회 (관계도 이름을 기준으로)
const relationships = await prisma.table_relationships.findMany({
where: whereCondition,
select: {
relationship_name: true,
from_table_name: true,
to_table_name: true,
connection_type: true,
relationship_type: true,
created_date: true,
created_by: true,
updated_date: true,
updated_by: true,
},
orderBy: [{ relationship_name: "asc" }, { created_date: "desc" }],
});
// 관계도 이름별로 그룹화
const diagramMap = new Map<string, any>();
relationships.forEach((rel) => {
const diagramName = rel.relationship_name;
if (!diagramMap.has(diagramName)) {
diagramMap.set(diagramName, {
diagramName: diagramName,
connectionType: rel.connection_type,
relationshipType: rel.relationship_type,
tableCount: new Set<string>(),
relationshipCount: 0,
createdAt: rel.created_date,
createdBy: rel.created_by,
updatedAt: rel.updated_date,
updatedBy: rel.updated_by,
tables: [],
});
}
const diagram = diagramMap.get(diagramName);
diagram.tableCount.add(rel.from_table_name);
diagram.tableCount.add(rel.to_table_name);
diagram.relationshipCount++;
// 최신 업데이트 시간 유지
if (rel.updated_date && rel.updated_date > diagram.updatedAt) {
diagram.updatedAt = rel.updated_date;
diagram.updatedBy = rel.updated_by;
}
});
// Set을 배열로 변환하고 테이블 개수 계산
const diagrams = Array.from(diagramMap.values()).map((diagram) => ({
...diagram,
tableCount: diagram.tableCount.size,
tables: Array.from(diagram.tableCount),
}));
// 페이징 처리
const total = diagrams.length;
const startIndex = (page - 1) * size;
const endIndex = startIndex + size;
const paginatedDiagrams = diagrams.slice(startIndex, endIndex);
const result = {
diagrams: paginatedDiagrams,
total,
page,
size,
totalPages: Math.ceil(total / size),
hasNext: page < Math.ceil(total / size),
hasPrev: page > 1,
};
logger.info(
`DataflowService: 관계도 목록 조회 완료 - 총 ${total}개 관계도 중 ${paginatedDiagrams.length}개 조회`
);
return result;
} catch (error) {
logger.error("DataflowService: 관계도 목록 조회 실패", error);
throw error;
}
}
/**
* 특정 관계도의 모든 관계 조회
*/
async getDiagramRelationships(companyCode: string, diagramName: string) {
try {
logger.info(
`DataflowService: 관계도 관계 조회 시작 - ${companyCode}, diagram: ${diagramName}`
);
const relationships = await prisma.table_relationships.findMany({
where: {
company_code: companyCode,
relationship_name: diagramName,
is_active: "Y",
},
orderBy: {
created_date: "asc",
},
});
logger.info(
`DataflowService: 관계도 관계 조회 완료 - ${diagramName}, ${relationships.length}개 관계`
);
return relationships;
} catch (error) {
logger.error(
`DataflowService: 관계도 관계 조회 실패 - ${diagramName}`,
error
);
throw error;
}
}
}