배포 오류 해결

This commit is contained in:
dohyeons
2025-12-11 14:34:42 +09:00
parent 4247c3bb70
commit 1d97bcaa9f
6 changed files with 220 additions and 71 deletions

View File

@@ -3,7 +3,8 @@
* 두 필드가 같은 값을 선택할 수 없도록 제한하는 기능
*/
import { Request, Response } from "express";
import { Response } from "express";
import { AuthenticatedRequest } from "../types/auth";
import { query, queryOne } from "../database/db";
import logger from "../utils/logger";
@@ -14,7 +15,10 @@ import logger from "../utils/logger";
/**
* 상호 배제 규칙 목록 조회
*/
export const getExclusions = async (req: Request, res: Response) => {
export const getExclusions = async (
req: AuthenticatedRequest,
res: Response
) => {
try {
const companyCode = req.user?.companyCode || "*";
const { isActive } = req.query;
@@ -42,7 +46,10 @@ export const getExclusions = async (req: Request, res: Response) => {
const result = await query(sql, params);
logger.info("상호 배제 규칙 목록 조회", { count: result.length, companyCode });
logger.info("상호 배제 규칙 목록 조회", {
count: result.length,
companyCode,
});
res.json({
success: true,
@@ -61,7 +68,10 @@ export const getExclusions = async (req: Request, res: Response) => {
/**
* 상호 배제 규칙 상세 조회
*/
export const getExclusionDetail = async (req: Request, res: Response) => {
export const getExclusionDetail = async (
req: AuthenticatedRequest,
res: Response
) => {
try {
const { exclusionId } = req.params;
const companyCode = req.user?.companyCode || "*";
@@ -116,7 +126,10 @@ const generateExclusionCode = async (companyCode: string): Promise<string> => {
/**
* 상호 배제 규칙 생성
*/
export const createExclusion = async (req: Request, res: Response) => {
export const createExclusion = async (
req: AuthenticatedRequest,
res: Response
) => {
try {
const companyCode = req.user?.companyCode || "*";
const {
@@ -133,7 +146,8 @@ export const createExclusion = async (req: Request, res: Response) => {
if (!exclusionName || !fieldNames || !sourceTable || !valueColumn) {
return res.status(400).json({
success: false,
message: "필수 필드가 누락되었습니다. (exclusionName, fieldNames, sourceTable, valueColumn)",
message:
"필수 필드가 누락되었습니다. (exclusionName, fieldNames, sourceTable, valueColumn)",
});
}
@@ -195,7 +209,10 @@ export const createExclusion = async (req: Request, res: Response) => {
/**
* 상호 배제 규칙 수정
*/
export const updateExclusion = async (req: Request, res: Response) => {
export const updateExclusion = async (
req: AuthenticatedRequest,
res: Response
) => {
try {
const { exclusionId } = req.params;
const companyCode = req.user?.companyCode || "*";
@@ -274,7 +291,10 @@ export const updateExclusion = async (req: Request, res: Response) => {
/**
* 상호 배제 규칙 삭제
*/
export const deleteExclusion = async (req: Request, res: Response) => {
export const deleteExclusion = async (
req: AuthenticatedRequest,
res: Response
) => {
try {
const { exclusionId } = req.params;
const companyCode = req.user?.companyCode || "*";
@@ -322,7 +342,10 @@ export const deleteExclusion = async (req: Request, res: Response) => {
* 상호 배제 검증
* 선택하려는 값이 다른 필드와 충돌하는지 확인
*/
export const validateExclusion = async (req: Request, res: Response) => {
export const validateExclusion = async (
req: AuthenticatedRequest,
res: Response
) => {
try {
const { exclusionCode } = req.params;
const { fieldValues } = req.body; // { "source_warehouse": "WH001", "target_warehouse": "WH002" }
@@ -347,7 +370,9 @@ export const validateExclusion = async (req: Request, res: Response) => {
}
// 필드명 파싱
const fields = exclusion.field_names.split(",").map((f: string) => f.trim());
const fields = exclusion.field_names
.split(",")
.map((f: string) => f.trim());
// 필드 값 수집
const values: string[] = [];
@@ -418,7 +443,10 @@ export const validateExclusion = async (req: Request, res: Response) => {
* 필드에 대한 배제 옵션 조회
* 다른 필드에서 이미 선택한 값을 제외한 옵션 반환
*/
export const getExcludedOptions = async (req: Request, res: Response) => {
export const getExcludedOptions = async (
req: AuthenticatedRequest,
res: Response
) => {
try {
const { exclusionCode } = req.params;
const { currentField, selectedValues } = req.query; // selectedValues: 이미 선택된 값들 (콤마 구분)
@@ -470,9 +498,14 @@ export const getExcludedOptions = async (req: Request, res: Response) => {
// 이미 선택된 값 제외
if (selectedValues) {
const excludeValues = (selectedValues as string).split(",").map((v) => v.trim()).filter((v) => v);
const excludeValues = (selectedValues as string)
.split(",")
.map((v) => v.trim())
.filter((v) => v);
if (excludeValues.length > 0) {
const placeholders = excludeValues.map((_, i) => `$${optionsParamIndex + i}`).join(",");
const placeholders = excludeValues
.map((_, i) => `$${optionsParamIndex + i}`)
.join(",");
optionsSql += ` AND ${exclusion.value_column} NOT IN (${placeholders})`;
optionsParams.push(...excludeValues);
}
@@ -502,4 +535,3 @@ export const getExcludedOptions = async (req: Request, res: Response) => {
});
}
};