수정/삭제 기능 구현
This commit is contained in:
@@ -561,6 +561,11 @@ class DataService {
|
||||
return validation.error!;
|
||||
}
|
||||
|
||||
// _relationInfo 추출 (조인 관계 업데이트용)
|
||||
const relationInfo = data._relationInfo;
|
||||
const cleanData = { ...data };
|
||||
delete cleanData._relationInfo;
|
||||
|
||||
// Primary Key 컬럼 찾기
|
||||
const pkResult = await query<{ attname: string }>(
|
||||
`SELECT a.attname
|
||||
@@ -575,8 +580,8 @@ class DataService {
|
||||
pkColumn = pkResult[0].attname;
|
||||
}
|
||||
|
||||
const columns = Object.keys(data);
|
||||
const values = Object.values(data);
|
||||
const columns = Object.keys(cleanData);
|
||||
const values = Object.values(cleanData);
|
||||
const setClause = columns
|
||||
.map((col, index) => `"${col}" = $${index + 1}`)
|
||||
.join(", ");
|
||||
@@ -599,6 +604,35 @@ class DataService {
|
||||
};
|
||||
}
|
||||
|
||||
// 🔗 조인 관계가 있는 경우, 연결된 테이블의 FK도 업데이트
|
||||
if (relationInfo && relationInfo.rightTable && relationInfo.leftColumn && relationInfo.rightColumn) {
|
||||
const { rightTable, leftColumn, rightColumn, oldLeftValue } = relationInfo;
|
||||
const newLeftValue = cleanData[leftColumn];
|
||||
|
||||
// leftColumn 값이 변경된 경우에만 우측 테이블 업데이트
|
||||
if (newLeftValue !== undefined && newLeftValue !== oldLeftValue) {
|
||||
console.log("🔗 조인 관계 FK 업데이트:", {
|
||||
rightTable,
|
||||
rightColumn,
|
||||
oldValue: oldLeftValue,
|
||||
newValue: newLeftValue,
|
||||
});
|
||||
|
||||
try {
|
||||
const updateRelatedQuery = `
|
||||
UPDATE "${rightTable}"
|
||||
SET "${rightColumn}" = $1
|
||||
WHERE "${rightColumn}" = $2
|
||||
`;
|
||||
const updateResult = await query(updateRelatedQuery, [newLeftValue, oldLeftValue]);
|
||||
console.log(`✅ 연결된 ${rightTable} 테이블의 ${updateResult.length}개 레코드 업데이트 완료`);
|
||||
} catch (relError) {
|
||||
console.error("❌ 연결된 테이블 업데이트 실패:", relError);
|
||||
// 연결된 테이블 업데이트 실패 시 롤백은 하지 않고 경고만 로그
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return {
|
||||
success: true,
|
||||
data: result[0],
|
||||
|
||||
Reference in New Issue
Block a user