화면관리 삭제기능구현
This commit is contained in:
@@ -90,24 +90,180 @@ export const updateScreen = async (
|
||||
}
|
||||
};
|
||||
|
||||
// 화면 삭제
|
||||
export const deleteScreen = async (
|
||||
// 화면 의존성 체크
|
||||
export const checkScreenDependencies = async (
|
||||
req: AuthenticatedRequest,
|
||||
res: Response
|
||||
) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
const { companyCode } = req.user as any;
|
||||
await screenManagementService.deleteScreen(parseInt(id), companyCode);
|
||||
res.json({ success: true, message: "화면이 삭제되었습니다." });
|
||||
|
||||
const result = await screenManagementService.checkScreenDependencies(
|
||||
parseInt(id),
|
||||
companyCode
|
||||
);
|
||||
res.json({ success: true, ...result });
|
||||
} catch (error) {
|
||||
console.error("화면 의존성 체크 실패:", error);
|
||||
res
|
||||
.status(500)
|
||||
.json({ success: false, message: "의존성 체크에 실패했습니다." });
|
||||
}
|
||||
};
|
||||
|
||||
// 화면 삭제 (휴지통으로 이동)
|
||||
export const deleteScreen = async (
|
||||
req: AuthenticatedRequest,
|
||||
res: Response
|
||||
) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
const { companyCode, userId } = req.user as any;
|
||||
const { deleteReason, force } = req.body;
|
||||
|
||||
await screenManagementService.deleteScreen(
|
||||
parseInt(id),
|
||||
companyCode,
|
||||
userId,
|
||||
deleteReason,
|
||||
force || false
|
||||
);
|
||||
res.json({ success: true, message: "화면이 휴지통으로 이동되었습니다." });
|
||||
} catch (error: any) {
|
||||
console.error("화면 삭제 실패:", error);
|
||||
|
||||
// 의존성 오류인 경우 특별 처리
|
||||
if (error.code === "SCREEN_HAS_DEPENDENCIES") {
|
||||
res.status(409).json({
|
||||
success: false,
|
||||
message: error.message,
|
||||
code: error.code,
|
||||
dependencies: error.dependencies,
|
||||
});
|
||||
return;
|
||||
}
|
||||
|
||||
res
|
||||
.status(500)
|
||||
.json({ success: false, message: "화면 삭제에 실패했습니다." });
|
||||
}
|
||||
};
|
||||
|
||||
// 화면 복원 (휴지통에서 복원)
|
||||
export const restoreScreen = async (
|
||||
req: AuthenticatedRequest,
|
||||
res: Response
|
||||
) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
const { companyCode, userId } = req.user as any;
|
||||
|
||||
await screenManagementService.restoreScreen(
|
||||
parseInt(id),
|
||||
companyCode,
|
||||
userId
|
||||
);
|
||||
res.json({ success: true, message: "화면이 복원되었습니다." });
|
||||
} catch (error) {
|
||||
console.error("화면 복원 실패:", error);
|
||||
res
|
||||
.status(500)
|
||||
.json({ success: false, message: "화면 복원에 실패했습니다." });
|
||||
}
|
||||
};
|
||||
|
||||
// 화면 영구 삭제
|
||||
export const permanentDeleteScreen = async (
|
||||
req: AuthenticatedRequest,
|
||||
res: Response
|
||||
) => {
|
||||
try {
|
||||
const { id } = req.params;
|
||||
const { companyCode } = req.user as any;
|
||||
|
||||
await screenManagementService.permanentDeleteScreen(
|
||||
parseInt(id),
|
||||
companyCode
|
||||
);
|
||||
res.json({ success: true, message: "화면이 영구적으로 삭제되었습니다." });
|
||||
} catch (error) {
|
||||
console.error("화면 영구 삭제 실패:", error);
|
||||
res
|
||||
.status(500)
|
||||
.json({ success: false, message: "화면 영구 삭제에 실패했습니다." });
|
||||
}
|
||||
};
|
||||
|
||||
// 휴지통 화면 목록 조회
|
||||
export const getDeletedScreens = async (
|
||||
req: AuthenticatedRequest,
|
||||
res: Response
|
||||
) => {
|
||||
try {
|
||||
const { companyCode } = req.user as any;
|
||||
const page = parseInt(req.query.page as string) || 1;
|
||||
const size = parseInt(req.query.size as string) || 20;
|
||||
|
||||
const result = await screenManagementService.getDeletedScreens(
|
||||
companyCode,
|
||||
page,
|
||||
size
|
||||
);
|
||||
res.json({ success: true, ...result });
|
||||
} catch (error) {
|
||||
console.error("휴지통 화면 목록 조회 실패:", error);
|
||||
res.status(500).json({
|
||||
success: false,
|
||||
message: "휴지통 화면 목록 조회에 실패했습니다.",
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// 휴지통 화면 일괄 영구 삭제
|
||||
export const bulkPermanentDeleteScreens = async (
|
||||
req: AuthenticatedRequest,
|
||||
res: Response
|
||||
) => {
|
||||
try {
|
||||
const { companyCode } = req.user as any;
|
||||
const { screenIds } = req.body;
|
||||
|
||||
if (!Array.isArray(screenIds) || screenIds.length === 0) {
|
||||
return res.status(400).json({
|
||||
success: false,
|
||||
message: "삭제할 화면 ID 목록이 필요합니다.",
|
||||
});
|
||||
}
|
||||
|
||||
const result = await screenManagementService.bulkPermanentDeleteScreens(
|
||||
screenIds,
|
||||
companyCode
|
||||
);
|
||||
|
||||
let message = `${result.deletedCount}개 화면이 영구 삭제되었습니다.`;
|
||||
if (result.skippedCount > 0) {
|
||||
message += ` (${result.skippedCount}개 화면은 삭제되지 않았습니다.)`;
|
||||
}
|
||||
|
||||
return res.json({
|
||||
success: true,
|
||||
message,
|
||||
result: {
|
||||
deletedCount: result.deletedCount,
|
||||
skippedCount: result.skippedCount,
|
||||
errors: result.errors,
|
||||
},
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("휴지통 화면 일괄 삭제 실패:", error);
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
message: "일괄 삭제에 실패했습니다.",
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
// 화면 복사
|
||||
export const copyScreen = async (
|
||||
req: AuthenticatedRequest,
|
||||
@@ -349,3 +505,26 @@ export const unassignScreenFromMenu = async (
|
||||
.json({ success: false, message: "화면-메뉴 할당 해제에 실패했습니다." });
|
||||
}
|
||||
};
|
||||
|
||||
// 휴지통 화면들의 메뉴 할당 정리 (관리자용)
|
||||
export const cleanupDeletedScreenMenuAssignments = async (
|
||||
req: AuthenticatedRequest,
|
||||
res: Response
|
||||
) => {
|
||||
try {
|
||||
const result =
|
||||
await screenManagementService.cleanupDeletedScreenMenuAssignments();
|
||||
|
||||
return res.json({
|
||||
success: true,
|
||||
message: result.message,
|
||||
updatedCount: result.updatedCount,
|
||||
});
|
||||
} catch (error) {
|
||||
console.error("메뉴 할당 정리 실패:", error);
|
||||
return res.status(500).json({
|
||||
success: false,
|
||||
message: "메뉴 할당 정리에 실패했습니다.",
|
||||
});
|
||||
}
|
||||
};
|
||||
|
||||
Reference in New Issue
Block a user