2025-09-01 14:00:31 +09:00
|
|
|
import { Response } from "express";
|
|
|
|
|
import { screenManagementService } from "../services/screenManagementService";
|
|
|
|
|
import { AuthenticatedRequest } from "../types/auth";
|
|
|
|
|
|
|
|
|
|
// 화면 목록 조회
|
|
|
|
|
export const getScreens = async (req: AuthenticatedRequest, res: Response) => {
|
|
|
|
|
try {
|
|
|
|
|
const { companyCode } = req.user as any;
|
|
|
|
|
const screens = await screenManagementService.getScreens(companyCode);
|
|
|
|
|
res.json({ success: true, data: screens });
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error("화면 목록 조회 실패:", error);
|
|
|
|
|
res
|
|
|
|
|
.status(500)
|
|
|
|
|
.json({ success: false, message: "화면 목록 조회에 실패했습니다." });
|
2025-09-01 11:48:12 +09:00
|
|
|
}
|
2025-09-01 14:00:31 +09:00
|
|
|
};
|
|
|
|
|
|
2025-09-01 18:42:59 +09:00
|
|
|
// 단일 화면 조회
|
|
|
|
|
export const getScreen = async (
|
|
|
|
|
req: AuthenticatedRequest,
|
|
|
|
|
res: Response
|
|
|
|
|
): Promise<void> => {
|
|
|
|
|
try {
|
|
|
|
|
const { id } = req.params;
|
|
|
|
|
const { companyCode } = req.user as any;
|
|
|
|
|
const screen = await screenManagementService.getScreen(
|
|
|
|
|
parseInt(id),
|
|
|
|
|
companyCode
|
|
|
|
|
);
|
|
|
|
|
|
|
|
|
|
if (!screen) {
|
|
|
|
|
res.status(404).json({
|
|
|
|
|
success: false,
|
|
|
|
|
message: "화면을 찾을 수 없습니다.",
|
|
|
|
|
});
|
|
|
|
|
return;
|
|
|
|
|
}
|
|
|
|
|
|
|
|
|
|
res.json({ success: true, data: screen });
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error("화면 조회 실패:", error);
|
|
|
|
|
res
|
|
|
|
|
.status(500)
|
|
|
|
|
.json({ success: false, message: "화면 조회에 실패했습니다." });
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
2025-09-01 14:00:31 +09:00
|
|
|
// 화면 생성
|
|
|
|
|
export const createScreen = async (
|
|
|
|
|
req: AuthenticatedRequest,
|
|
|
|
|
res: Response
|
|
|
|
|
) => {
|
|
|
|
|
try {
|
|
|
|
|
const { companyCode } = req.user as any;
|
|
|
|
|
const screenData = { ...req.body, companyCode };
|
|
|
|
|
const newScreen = await screenManagementService.createScreen(
|
|
|
|
|
screenData,
|
|
|
|
|
companyCode
|
|
|
|
|
);
|
|
|
|
|
res.status(201).json({ success: true, data: newScreen });
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error("화면 생성 실패:", error);
|
|
|
|
|
res
|
|
|
|
|
.status(500)
|
|
|
|
|
.json({ success: false, message: "화면 생성에 실패했습니다." });
|
2025-09-01 11:48:12 +09:00
|
|
|
}
|
2025-09-01 14:00:31 +09:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 화면 수정
|
|
|
|
|
export const updateScreen = async (
|
|
|
|
|
req: AuthenticatedRequest,
|
|
|
|
|
res: Response
|
|
|
|
|
) => {
|
|
|
|
|
try {
|
|
|
|
|
const { id } = req.params;
|
|
|
|
|
const { companyCode } = req.user as any;
|
|
|
|
|
const updateData = { ...req.body, companyCode };
|
|
|
|
|
const updatedScreen = await screenManagementService.updateScreen(
|
|
|
|
|
parseInt(id),
|
|
|
|
|
updateData,
|
|
|
|
|
companyCode
|
|
|
|
|
);
|
|
|
|
|
res.json({ success: true, data: updatedScreen });
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error("화면 수정 실패:", error);
|
|
|
|
|
res
|
|
|
|
|
.status(500)
|
|
|
|
|
.json({ success: false, message: "화면 수정에 실패했습니다." });
|
2025-09-01 11:48:12 +09:00
|
|
|
}
|
2025-09-01 14:00:31 +09:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 화면 삭제
|
|
|
|
|
export const deleteScreen = 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: "화면이 삭제되었습니다." });
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error("화면 삭제 실패:", error);
|
|
|
|
|
res
|
|
|
|
|
.status(500)
|
|
|
|
|
.json({ success: false, message: "화면 삭제에 실패했습니다." });
|
2025-09-01 11:48:12 +09:00
|
|
|
}
|
2025-09-01 14:00:31 +09:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 테이블 목록 조회
|
|
|
|
|
export const getTables = async (req: AuthenticatedRequest, res: Response) => {
|
|
|
|
|
try {
|
|
|
|
|
const { companyCode } = req.user as any;
|
|
|
|
|
const tables = await screenManagementService.getTables(companyCode);
|
|
|
|
|
res.json({ success: true, data: tables });
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error("테이블 목록 조회 실패:", error);
|
|
|
|
|
res
|
|
|
|
|
.status(500)
|
|
|
|
|
.json({ success: false, message: "테이블 목록 조회에 실패했습니다." });
|
2025-09-01 11:48:12 +09:00
|
|
|
}
|
2025-09-01 14:00:31 +09:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 테이블 컬럼 정보 조회
|
|
|
|
|
export const getTableColumns = async (
|
|
|
|
|
req: AuthenticatedRequest,
|
|
|
|
|
res: Response
|
|
|
|
|
) => {
|
|
|
|
|
try {
|
|
|
|
|
const { tableName } = req.params;
|
|
|
|
|
const { companyCode } = req.user as any;
|
|
|
|
|
const columns = await screenManagementService.getTableColumns(
|
|
|
|
|
tableName,
|
|
|
|
|
companyCode
|
|
|
|
|
);
|
|
|
|
|
res.json({ success: true, data: columns });
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error("테이블 컬럼 조회 실패:", error);
|
|
|
|
|
res
|
|
|
|
|
.status(500)
|
|
|
|
|
.json({ success: false, message: "테이블 컬럼 조회에 실패했습니다." });
|
2025-09-01 11:48:12 +09:00
|
|
|
}
|
2025-09-01 14:00:31 +09:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 레이아웃 저장
|
|
|
|
|
export const saveLayout = async (req: AuthenticatedRequest, res: Response) => {
|
|
|
|
|
try {
|
|
|
|
|
const { screenId } = req.params;
|
|
|
|
|
const { companyCode } = req.user as any;
|
|
|
|
|
const layoutData = req.body;
|
|
|
|
|
const savedLayout = await screenManagementService.saveLayout(
|
|
|
|
|
parseInt(screenId),
|
|
|
|
|
layoutData,
|
|
|
|
|
companyCode
|
|
|
|
|
);
|
|
|
|
|
res.json({ success: true, data: savedLayout });
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error("레이아웃 저장 실패:", error);
|
|
|
|
|
res
|
|
|
|
|
.status(500)
|
|
|
|
|
.json({ success: false, message: "레이아웃 저장에 실패했습니다." });
|
2025-09-01 11:48:12 +09:00
|
|
|
}
|
2025-09-01 14:00:31 +09:00
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 레이아웃 조회
|
|
|
|
|
export const getLayout = async (req: AuthenticatedRequest, res: Response) => {
|
|
|
|
|
try {
|
|
|
|
|
const { screenId } = req.params;
|
|
|
|
|
const { companyCode } = req.user as any;
|
|
|
|
|
const layout = await screenManagementService.getLayout(
|
|
|
|
|
parseInt(screenId),
|
|
|
|
|
companyCode
|
|
|
|
|
);
|
|
|
|
|
res.json({ success: true, data: layout });
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error("레이아웃 조회 실패:", error);
|
|
|
|
|
res
|
|
|
|
|
.status(500)
|
|
|
|
|
.json({ success: false, message: "레이아웃 조회에 실패했습니다." });
|
2025-09-01 11:48:12 +09:00
|
|
|
}
|
2025-09-01 14:00:31 +09:00
|
|
|
};
|
2025-09-01 17:57:52 +09:00
|
|
|
|
|
|
|
|
// 화면 코드 자동 생성
|
|
|
|
|
export const generateScreenCode = async (
|
|
|
|
|
req: AuthenticatedRequest,
|
|
|
|
|
res: Response
|
|
|
|
|
) => {
|
|
|
|
|
try {
|
|
|
|
|
const { companyCode: paramCompanyCode } = req.params;
|
|
|
|
|
const { companyCode: userCompanyCode } = req.user as any;
|
|
|
|
|
|
|
|
|
|
// 사용자의 회사 코드 또는 파라미터의 회사 코드 사용
|
|
|
|
|
const targetCompanyCode = paramCompanyCode || userCompanyCode;
|
|
|
|
|
|
|
|
|
|
const generatedCode =
|
|
|
|
|
await screenManagementService.generateScreenCode(targetCompanyCode);
|
|
|
|
|
res.json({ success: true, data: { screenCode: generatedCode } });
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error("화면 코드 생성 실패:", error);
|
|
|
|
|
res
|
|
|
|
|
.status(500)
|
|
|
|
|
.json({ success: false, message: "화면 코드 생성에 실패했습니다." });
|
|
|
|
|
}
|
|
|
|
|
};
|
2025-09-01 18:42:59 +09:00
|
|
|
|
|
|
|
|
// 화면-메뉴 할당
|
|
|
|
|
export const assignScreenToMenu = async (
|
|
|
|
|
req: AuthenticatedRequest,
|
|
|
|
|
res: Response
|
|
|
|
|
) => {
|
|
|
|
|
try {
|
|
|
|
|
const { screenId } = req.params;
|
|
|
|
|
const { companyCode } = req.user as any;
|
|
|
|
|
const assignmentData = { ...req.body, companyCode };
|
|
|
|
|
|
|
|
|
|
await screenManagementService.assignScreenToMenu(
|
|
|
|
|
parseInt(screenId),
|
|
|
|
|
assignmentData
|
|
|
|
|
);
|
|
|
|
|
res.json({
|
|
|
|
|
success: true,
|
|
|
|
|
message: "화면이 메뉴에 성공적으로 할당되었습니다.",
|
|
|
|
|
});
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error("화면-메뉴 할당 실패:", error);
|
|
|
|
|
res
|
|
|
|
|
.status(500)
|
|
|
|
|
.json({ success: false, message: "화면-메뉴 할당에 실패했습니다." });
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 메뉴별 할당된 화면 목록 조회
|
|
|
|
|
export const getScreensByMenu = async (
|
|
|
|
|
req: AuthenticatedRequest,
|
|
|
|
|
res: Response
|
|
|
|
|
) => {
|
|
|
|
|
try {
|
|
|
|
|
const { menuObjid } = req.params;
|
|
|
|
|
const { companyCode } = req.user as any;
|
|
|
|
|
|
|
|
|
|
const screens = await screenManagementService.getScreensByMenu(
|
|
|
|
|
parseInt(menuObjid),
|
|
|
|
|
companyCode
|
|
|
|
|
);
|
|
|
|
|
res.json({ success: true, data: screens });
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error("메뉴별 화면 조회 실패:", error);
|
|
|
|
|
res
|
|
|
|
|
.status(500)
|
|
|
|
|
.json({ success: false, message: "메뉴별 화면 조회에 실패했습니다." });
|
|
|
|
|
}
|
|
|
|
|
};
|
|
|
|
|
|
|
|
|
|
// 화면-메뉴 할당 해제
|
|
|
|
|
export const unassignScreenFromMenu = async (
|
|
|
|
|
req: AuthenticatedRequest,
|
|
|
|
|
res: Response
|
|
|
|
|
) => {
|
|
|
|
|
try {
|
|
|
|
|
const { screenId, menuObjid } = req.params;
|
|
|
|
|
const { companyCode } = req.user as any;
|
|
|
|
|
|
|
|
|
|
await screenManagementService.unassignScreenFromMenu(
|
|
|
|
|
parseInt(screenId),
|
|
|
|
|
parseInt(menuObjid),
|
|
|
|
|
companyCode
|
|
|
|
|
);
|
|
|
|
|
res.json({ success: true, message: "화면-메뉴 할당이 해제되었습니다." });
|
|
|
|
|
} catch (error) {
|
|
|
|
|
console.error("화면-메뉴 할당 해제 실패:", error);
|
|
|
|
|
res
|
|
|
|
|
.status(500)
|
|
|
|
|
.json({ success: false, message: "화면-메뉴 할당 해제에 실패했습니다." });
|
|
|
|
|
}
|
|
|
|
|
};
|