생성된 관계도 확인
This commit is contained in:
@@ -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;
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user