fix: batch_id 컬럼 없을 때 fallback + 트랜잭션 안전 처리

- batch_id 컬럼 존재 여부를 사전 확인 후 INSERT 쿼리 분기
- 트랜잭션 내 try-catch fallback 대신 조건부 컬럼 방식으로 변경
- 배포 DB에 ALTER TABLE 권한 없어도 정상 동작
This commit is contained in:
SeongHyun Kim
2026-04-06 12:20:09 +09:00
parent 32f99fba63
commit c8f24d60f3

View File

@@ -1757,31 +1757,32 @@ export const acceptProcess = async (req: AuthenticatedRequest, res: Response) =>
});
}
// batch_id 생성 또는 전달받은 값 사용
// 프론트에서 batch_id를 전달하면 이어받고, 없으면 새로 생성
// batch_id: 컬럼이 있으면 포함, 없으면 제외
const batchId = req.body.batch_id || `BATCH-${Date.now()}-${Math.random().toString(36).slice(2, 6)}`;
const hasBatchCol = _batchMigrationDone;
// 분할 행 INSERT (원본 행에서 공정 정보 복사 + batch_id)
await ensureBatchIdColumn();
const result = await client.query(
`INSERT INTO work_order_process (
id, wo_id, seq_no, process_code, process_name, is_required, is_fixed_order,
// 분할 행 INSERT (batch_id는 컬럼 존재 시에만)
const insertCols = `id, wo_id, seq_no, process_code, process_name, is_required, is_fixed_order,
standard_time, equipment_code, routing_detail_id,
status, input_qty, good_qty, defect_qty, total_production_qty,
result_status, accepted_by, accepted_at, started_at,
parent_process_id, company_code, writer, batch_id
) VALUES (
gen_random_uuid()::text, $1, $2, $3, $4, $5, $6, $7, $8, $9,
parent_process_id, company_code, writer${hasBatchCol ? ", batch_id" : ""}`;
const insertVals = `gen_random_uuid()::text, $1, $2, $3, $4, $5, $6, $7, $8, $9,
'in_progress', $10, '0', '0', '0',
'draft', $11, NOW()::text, NOW()::text,
$12, $13, $11, $14
) RETURNING id, input_qty, status, process_name, result_status, accepted_by, batch_id`,
[
row.wo_id, row.seq_no, row.process_code, row.process_name,
row.is_required, row.is_fixed_order, row.standard_time,
row.equipment_code, row.routing_detail_id,
String(qty), userId, masterId, companyCode, batchId,
]
$12, $13, $11${hasBatchCol ? ", $14" : ""}`;
const insertParams = [
row.wo_id, row.seq_no, row.process_code, row.process_name,
row.is_required, row.is_fixed_order, row.standard_time,
row.equipment_code, row.routing_detail_id,
String(qty), userId, masterId, companyCode,
...(hasBatchCol ? [batchId] : []),
];
const result = await client.query(
`INSERT INTO work_order_process (${insertCols}) VALUES (${insertVals})
RETURNING id, input_qty, status, process_name, result_status, accepted_by`,
insertParams
);
// 분할 행에 체크리스트 복사