공차등록/운행알림 기능 개선 - vehicles 테이블 출발지/도착지 저장 및 운행종료 시 초기화

This commit is contained in:
dohyeons 2025-12-09 16:38:47 +09:00
parent 2479e3a0c4
commit 94b371ca0f
2 changed files with 65 additions and 4 deletions

View File

@ -427,7 +427,8 @@ export const updateFieldValue = async (
): Promise<Response | void> => {
try {
const { companyCode, userId } = req.user as any;
const { tableName, keyField, keyValue, updateField, updateValue } = req.body;
const { tableName, keyField, keyValue, updateField, updateValue } =
req.body;
console.log("🔄 [updateFieldValue] 요청:", {
tableName,
@ -440,16 +441,27 @@ export const updateFieldValue = async (
});
// 필수 필드 검증
if (!tableName || !keyField || keyValue === undefined || !updateField || updateValue === undefined) {
if (
!tableName ||
!keyField ||
keyValue === undefined ||
!updateField ||
updateValue === undefined
) {
return res.status(400).json({
success: false,
message: "필수 필드가 누락되었습니다. (tableName, keyField, keyValue, updateField, updateValue)",
message:
"필수 필드가 누락되었습니다. (tableName, keyField, keyValue, updateField, updateValue)",
});
}
// SQL 인젝션 방지를 위한 테이블명/컬럼명 검증
const validNamePattern = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
if (!validNamePattern.test(tableName) || !validNamePattern.test(keyField) || !validNamePattern.test(updateField)) {
if (
!validNamePattern.test(tableName) ||
!validNamePattern.test(keyField) ||
!validNamePattern.test(updateField)
) {
return res.status(400).json({
success: false,
message: "유효하지 않은 테이블명 또는 컬럼명입니다.",

View File

@ -3818,6 +3818,7 @@ export class ButtonActionExecutor {
const keyValue = resolveSpecialKeyword(config.trackingStatusKeySourceField || "__userId__", context);
if (keyValue) {
// 상태 업데이트
await apiClient.put("/dynamic-form/update-field", {
tableName: statusTableName,
keyField: keyField,
@ -3826,6 +3827,37 @@ export class ButtonActionExecutor {
updateValue: config.trackingStatusOnStart,
});
console.log("✅ 상태 변경 완료:", config.trackingStatusOnStart);
// 🆕 출발지/도착지도 vehicles 테이블에 저장
if (departure) {
try {
await apiClient.put("/dynamic-form/update-field", {
tableName: statusTableName,
keyField: keyField,
keyValue: keyValue,
updateField: "departure",
updateValue: departure,
});
console.log("✅ 출발지 저장 완료:", departure);
} catch {
// 컬럼이 없으면 무시
}
}
if (arrival) {
try {
await apiClient.put("/dynamic-form/update-field", {
tableName: statusTableName,
keyField: keyField,
keyValue: keyValue,
updateField: "arrival",
updateValue: arrival,
});
console.log("✅ 도착지 저장 완료:", arrival);
} catch {
// 컬럼이 없으면 무시
}
}
}
} catch (statusError) {
console.warn("⚠️ 상태 변경 실패:", statusError);
@ -4032,6 +4064,23 @@ export class ButtonActionExecutor {
updateValue: effectiveConfig.trackingStatusOnStop,
});
console.log("✅ 상태 변경 완료:", effectiveConfig.trackingStatusOnStop);
// 🆕 운행 종료 시 vehicles 테이블의 출발지/도착지/위도/경도를 null로 초기화
const fieldsToReset = ["departure", "arrival", "latitude", "longitude"];
for (const field of fieldsToReset) {
try {
await apiClient.put("/dynamic-form/update-field", {
tableName: statusTableName,
keyField: keyField,
keyValue: keyValue,
updateField: field,
updateValue: null,
});
} catch {
// 컬럼이 없으면 무시
}
}
console.log("✅ 출발지/도착지/위도/경도 초기화 완료");
}
} catch (statusError) {
console.warn("⚠️ 상태 변경 실패:", statusError);