공차등록/운행알림 기능 개선 - vehicles 테이블 출발지/도착지 저장 및 운행종료 시 초기화
This commit is contained in:
parent
2479e3a0c4
commit
94b371ca0f
|
|
@ -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: "유효하지 않은 테이블명 또는 컬럼명입니다.",
|
||||
|
|
|
|||
|
|
@ -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);
|
||||
|
|
|
|||
Loading…
Reference in New Issue