/** * BOM 이력/버전 관리 컨트롤러 */ import { Request, Response } from "express"; import { logger } from "../utils/logger"; import * as bomService from "../services/bomService"; // ─── 이력 (History) ───────────────────────────── export async function getBomHistory(req: Request, res: Response) { try { const { bomId } = req.params; const companyCode = (req as any).user?.companyCode || "*"; const tableName = (req.query.tableName as string) || undefined; const data = await bomService.getBomHistory(bomId, companyCode, tableName); res.json({ success: true, data }); } catch (error: any) { logger.error("BOM 이력 조회 실패", { error: error.message }); res.status(500).json({ success: false, message: error.message }); } } export async function addBomHistory(req: Request, res: Response) { try { const { bomId } = req.params; const companyCode = (req as any).user?.companyCode || "*"; const changedBy = (req as any).user?.userName || (req as any).user?.userId || ""; const { change_type, change_description, revision, version, tableName } = req.body; if (!change_type) { res.status(400).json({ success: false, message: "change_type은 필수입니다" }); return; } const result = await bomService.addBomHistory(bomId, companyCode, { change_type, change_description, revision, version, changed_by: changedBy, }, tableName); res.json({ success: true, data: result }); } catch (error: any) { logger.error("BOM 이력 등록 실패", { error: error.message }); res.status(500).json({ success: false, message: error.message }); } } // ─── 버전 (Version) ───────────────────────────── export async function getBomVersions(req: Request, res: Response) { try { const { bomId } = req.params; const companyCode = (req as any).user?.companyCode || "*"; const tableName = (req.query.tableName as string) || undefined; const data = await bomService.getBomVersions(bomId, companyCode, tableName); res.json({ success: true, data }); } catch (error: any) { logger.error("BOM 버전 목록 조회 실패", { error: error.message }); res.status(500).json({ success: false, message: error.message }); } } export async function createBomVersion(req: Request, res: Response) { try { const { bomId } = req.params; const companyCode = (req as any).user?.companyCode || "*"; const createdBy = (req as any).user?.userName || (req as any).user?.userId || ""; const { tableName, detailTable } = req.body || {}; const result = await bomService.createBomVersion(bomId, companyCode, createdBy, tableName, detailTable); res.json({ success: true, data: result }); } catch (error: any) { logger.error("BOM 버전 생성 실패", { error: error.message }); res.status(500).json({ success: false, message: error.message }); } } export async function loadBomVersion(req: Request, res: Response) { try { const { bomId, versionId } = req.params; const companyCode = (req as any).user?.companyCode || "*"; const { tableName, detailTable } = req.body || {}; const result = await bomService.loadBomVersion(bomId, versionId, companyCode, tableName, detailTable); res.json({ success: true, data: result }); } catch (error: any) { logger.error("BOM 버전 불러오기 실패", { error: error.message }); res.status(500).json({ success: false, message: error.message }); } } export async function activateBomVersion(req: Request, res: Response) { try { const { bomId, versionId } = req.params; const { tableName } = req.body || {}; const result = await bomService.activateBomVersion(bomId, versionId, tableName); res.json({ success: true, data: result }); } catch (error: any) { logger.error("BOM 버전 사용 확정 실패", { error: error.message }); res.status(500).json({ success: false, message: error.message }); } } export async function deleteBomVersion(req: Request, res: Response) { try { const { bomId, versionId } = req.params; const tableName = (req.query.tableName as string) || undefined; const deleted = await bomService.deleteBomVersion(bomId, versionId, tableName); if (!deleted) { res.status(404).json({ success: false, message: "버전을 찾을 수 없습니다" }); return; } res.json({ success: true }); } catch (error: any) { logger.error("BOM 버전 삭제 실패", { error: error.message }); res.status(500).json({ success: false, message: error.message }); } }