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: "화면 목록 조회에 실패했습니다." }); } }; // 단일 화면 조회 export const getScreen = async ( req: AuthenticatedRequest, res: Response ): Promise => { 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: "화면 조회에 실패했습니다." }); } }; // 화면 생성 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: "화면 생성에 실패했습니다." }); } }; // 화면 수정 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: "화면 수정에 실패했습니다." }); } }; // 화면 삭제 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: "화면 삭제에 실패했습니다." }); } }; // 테이블 목록 조회 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: "테이블 목록 조회에 실패했습니다." }); } }; // 테이블 컬럼 정보 조회 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: "테이블 컬럼 조회에 실패했습니다." }); } }; // 레이아웃 저장 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: "레이아웃 저장에 실패했습니다." }); } }; // 레이아웃 조회 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: "레이아웃 조회에 실패했습니다." }); } }; // 화면 코드 자동 생성 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: "화면 코드 생성에 실패했습니다." }); } }; // 화면-메뉴 할당 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: "화면-메뉴 할당 해제에 실패했습니다." }); } };