ERP-node/backend-node/src/controllers/tableCategoryValueControlle...

271 lines
7.1 KiB
TypeScript
Raw Normal View History

2025-11-07 10:18:34 +09:00
import { Response } from "express";
import { AuthenticatedRequest } from "../types/auth";
2025-11-05 15:23:57 +09:00
import tableCategoryValueService from "../services/tableCategoryValueService";
import { logger } from "../utils/logger";
/**
*
*/
2025-11-07 10:18:34 +09:00
export const getCategoryColumns = async (req: AuthenticatedRequest, res: Response) => {
2025-11-05 15:23:57 +09:00
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,
});
}
};
/**
* ( )
*
* Query Parameters:
* - menuObjid: 메뉴 OBJID (, )
* - includeInactive: 비활성
2025-11-05 15:23:57 +09:00
*/
2025-11-07 10:18:34 +09:00
export const getCategoryValues = async (req: AuthenticatedRequest, res: Response) => {
2025-11-05 15:23:57 +09:00
try {
const companyCode = req.user!.companyCode;
const { tableName, columnName } = req.params;
const includeInactive = req.query.includeInactive === "true";
const menuObjid = req.query.menuObjid ? Number(req.query.menuObjid) : undefined;
logger.info("카테고리 값 조회 요청", {
tableName,
columnName,
menuObjid,
companyCode,
});
2025-11-05 15:23:57 +09:00
const values = await tableCategoryValueService.getCategoryValues(
tableName,
columnName,
companyCode,
includeInactive,
menuObjid // ← menuObjid 전달
2025-11-05 15:23:57 +09:00
);
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,
});
}
};
/**
* ( )
*
* Body:
* - menuObjid: 메뉴 OBJID ()
* -
2025-11-05 15:23:57 +09:00
*/
2025-11-07 10:18:34 +09:00
export const addCategoryValue = async (req: AuthenticatedRequest, res: Response) => {
2025-11-05 15:23:57 +09:00
try {
const companyCode = req.user!.companyCode;
const userId = req.user!.userId;
const { menuObjid, ...value } = req.body;
if (!menuObjid) {
return res.status(400).json({
success: false,
message: "menuObjid는 필수입니다",
});
}
logger.info("카테고리 값 추가 요청", {
tableName: value.tableName,
columnName: value.columnName,
menuObjid,
companyCode,
});
2025-11-05 15:23:57 +09:00
const newValue = await tableCategoryValueService.addCategoryValue(
value,
companyCode,
userId,
Number(menuObjid) // ← menuObjid 전달
2025-11-05 15:23:57 +09:00
);
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,
});
}
};
/**
*
*/
2025-11-07 10:18:34 +09:00
export const updateCategoryValue = async (req: AuthenticatedRequest, res: Response) => {
2025-11-05 15:23:57 +09:00
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,
});
}
};
/**
*
*/
2025-11-07 10:18:34 +09:00
export const deleteCategoryValue = async (req: AuthenticatedRequest, res: Response) => {
2025-11-05 15:23:57 +09:00
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 (
2025-11-07 10:22:49 +09:00
req: AuthenticatedRequest,
2025-11-05 15:23:57 +09:00
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,
});
}
};
/**
*
*/
2025-11-07 10:18:34 +09:00
export const reorderCategoryValues = async (req: AuthenticatedRequest, res: Response) => {
2025-11-05 15:23:57 +09:00
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,
});
}
};