공차등록/운행알림 기능 개선 - vehicles 테이블 출발지/도착지 저장 및 운행종료 시 초기화
This commit is contained in:
@@ -427,7 +427,8 @@ export const updateFieldValue = async (
|
|||||||
): Promise<Response | void> => {
|
): Promise<Response | void> => {
|
||||||
try {
|
try {
|
||||||
const { companyCode, userId } = req.user as any;
|
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] 요청:", {
|
console.log("🔄 [updateFieldValue] 요청:", {
|
||||||
tableName,
|
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({
|
return res.status(400).json({
|
||||||
success: false,
|
success: false,
|
||||||
message: "필수 필드가 누락되었습니다. (tableName, keyField, keyValue, updateField, updateValue)",
|
message:
|
||||||
|
"필수 필드가 누락되었습니다. (tableName, keyField, keyValue, updateField, updateValue)",
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
// SQL 인젝션 방지를 위한 테이블명/컬럼명 검증
|
// SQL 인젝션 방지를 위한 테이블명/컬럼명 검증
|
||||||
const validNamePattern = /^[a-zA-Z_][a-zA-Z0-9_]*$/;
|
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({
|
return res.status(400).json({
|
||||||
success: false,
|
success: false,
|
||||||
message: "유효하지 않은 테이블명 또는 컬럼명입니다.",
|
message: "유효하지 않은 테이블명 또는 컬럼명입니다.",
|
||||||
|
|||||||
@@ -3818,6 +3818,7 @@ export class ButtonActionExecutor {
|
|||||||
const keyValue = resolveSpecialKeyword(config.trackingStatusKeySourceField || "__userId__", context);
|
const keyValue = resolveSpecialKeyword(config.trackingStatusKeySourceField || "__userId__", context);
|
||||||
|
|
||||||
if (keyValue) {
|
if (keyValue) {
|
||||||
|
// 상태 업데이트
|
||||||
await apiClient.put("/dynamic-form/update-field", {
|
await apiClient.put("/dynamic-form/update-field", {
|
||||||
tableName: statusTableName,
|
tableName: statusTableName,
|
||||||
keyField: keyField,
|
keyField: keyField,
|
||||||
@@ -3826,6 +3827,37 @@ export class ButtonActionExecutor {
|
|||||||
updateValue: config.trackingStatusOnStart,
|
updateValue: config.trackingStatusOnStart,
|
||||||
});
|
});
|
||||||
console.log("✅ 상태 변경 완료:", 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) {
|
} catch (statusError) {
|
||||||
console.warn("⚠️ 상태 변경 실패:", statusError);
|
console.warn("⚠️ 상태 변경 실패:", statusError);
|
||||||
@@ -4032,6 +4064,23 @@ export class ButtonActionExecutor {
|
|||||||
updateValue: effectiveConfig.trackingStatusOnStop,
|
updateValue: effectiveConfig.trackingStatusOnStop,
|
||||||
});
|
});
|
||||||
console.log("✅ 상태 변경 완료:", 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) {
|
} catch (statusError) {
|
||||||
console.warn("⚠️ 상태 변경 실패:", statusError);
|
console.warn("⚠️ 상태 변경 실패:", statusError);
|
||||||
|
|||||||
Reference in New Issue
Block a user