import { Request, Response } from "express"; import tableCategoryValueService from "../services/tableCategoryValueService"; import { logger } from "../utils/logger"; /** * 테이블의 카테고리 컬럼 목록 조회 */ export const getCategoryColumns = async (req: Request, res: Response) => { try { const companyCode = req.user!.companyCode; const { tableName } = req.params; const columns = await tableCategoryValueService.getCategoryColumns( tableName, companyCode ); return res.json({ success: true, data: columns, }); } catch (error: any) { logger.error(`카테고리 컬럼 조회 실패: ${error.message}`); return res.status(500).json({ success: false, message: "카테고리 컬럼 조회 중 오류가 발생했습니다", error: error.message, }); } }; /** * 카테고리 값 목록 조회 (메뉴 스코프 적용) */ export const getCategoryValues = async (req: Request, res: Response) => { try { const companyCode = req.user!.companyCode; const { tableName, columnName } = req.params; const includeInactive = req.query.includeInactive === "true"; const values = await tableCategoryValueService.getCategoryValues( tableName, columnName, companyCode, includeInactive ); return res.json({ success: true, data: values, }); } catch (error: any) { logger.error(`카테고리 값 조회 실패: ${error.message}`); return res.status(500).json({ success: false, message: "카테고리 값 조회 중 오류가 발생했습니다", error: error.message, }); } }; /** * 카테고리 값 추가 */ export const addCategoryValue = async (req: Request, res: Response) => { try { const companyCode = req.user!.companyCode; const userId = req.user!.userId; const value = req.body; const newValue = await tableCategoryValueService.addCategoryValue( value, companyCode, userId ); return res.status(201).json({ success: true, data: newValue, }); } catch (error: any) { logger.error(`카테고리 값 추가 실패: ${error.message}`); return res.status(500).json({ success: false, message: error.message || "카테고리 값 추가 중 오류가 발생했습니다", error: error.message, }); } }; /** * 카테고리 값 수정 */ export const updateCategoryValue = async (req: Request, res: Response) => { try { const companyCode = req.user!.companyCode; const userId = req.user!.userId; const valueId = parseInt(req.params.valueId); const updates = req.body; if (isNaN(valueId)) { return res.status(400).json({ success: false, message: "유효하지 않은 값 ID입니다", }); } const updatedValue = await tableCategoryValueService.updateCategoryValue( valueId, updates, companyCode, userId ); return res.json({ success: true, data: updatedValue, }); } catch (error: any) { logger.error(`카테고리 값 수정 실패: ${error.message}`); return res.status(500).json({ success: false, message: "카테고리 값 수정 중 오류가 발생했습니다", error: error.message, }); } }; /** * 카테고리 값 삭제 */ export const deleteCategoryValue = async (req: Request, res: Response) => { try { const companyCode = req.user!.companyCode; const userId = req.user!.userId; const valueId = parseInt(req.params.valueId); if (isNaN(valueId)) { return res.status(400).json({ success: false, message: "유효하지 않은 값 ID입니다", }); } await tableCategoryValueService.deleteCategoryValue( valueId, companyCode, userId ); return res.json({ success: true, message: "카테고리 값이 삭제되었습니다", }); } catch (error: any) { logger.error(`카테고리 값 삭제 실패: ${error.message}`); return res.status(500).json({ success: false, message: error.message || "카테고리 값 삭제 중 오류가 발생했습니다", error: error.message, }); } }; /** * 카테고리 값 일괄 삭제 */ export const bulkDeleteCategoryValues = async ( req: Request, res: Response ) => { try { const companyCode = req.user!.companyCode; const userId = req.user!.userId; const { valueIds } = req.body; if (!Array.isArray(valueIds) || valueIds.length === 0) { return res.status(400).json({ success: false, message: "삭제할 값 ID 목록이 필요합니다", }); } await tableCategoryValueService.bulkDeleteCategoryValues( valueIds, companyCode, userId ); return res.json({ success: true, message: `${valueIds.length}개의 카테고리 값이 삭제되었습니다`, }); } catch (error: any) { logger.error(`카테고리 값 일괄 삭제 실패: ${error.message}`); return res.status(500).json({ success: false, message: "카테고리 값 일괄 삭제 중 오류가 발생했습니다", error: error.message, }); } }; /** * 카테고리 값 순서 변경 */ export const reorderCategoryValues = async (req: Request, res: Response) => { try { const companyCode = req.user!.companyCode; const { orderedValueIds } = req.body; if (!Array.isArray(orderedValueIds) || orderedValueIds.length === 0) { return res.status(400).json({ success: false, message: "순서 정보가 필요합니다", }); } await tableCategoryValueService.reorderCategoryValues( orderedValueIds, companyCode ); return res.json({ success: true, message: "카테고리 값 순서가 변경되었습니다", }); } catch (error: any) { logger.error(`카테고리 값 순서 변경 실패: ${error.message}`); return res.status(500).json({ success: false, message: "카테고리 값 순서 변경 중 오류가 발생했습니다", error: error.message, }); } };