Пишу чатбота на nodejs, есть несколько наборов данных которые он собирает через webhook но все они относятся к одной теме - перевозки. Соответственно в БД есть модель - перевозки, которая включает в себя все поля из разных типов перевозок (грузовые, легковые и тп).
Получается что когда приходят данные для легковой перевозки, в ней нет данных, необходимых для грузовой, и наоборот. Думаю на сервере просто проверяю есть ли такой-то параметр и если нету то его не записываю в объект, который потом сохраняется в БД. Вагон if'ов, но по другому не придумал как сделать, имена параметров могут не совпадать с теми что приходят. Правда в этом случае получаю ошибку "Unhandled error for request POST /webhook/: TypeError: Cannot read property 'startTime' of undefined" из условия одного из if'ов.
Почему оно не преобразовывает его в FALSE? Как исправить и может есть идеи как это получше организовать? Понимаю что коряво, но что с этим делать ума не приложу.
const transportationData = {
employeeId: req.body.originalDetectIntentRequest
.payload.data.userProfile.id,
'created-date': todayDate.toISOString(),
'request-status': 'обрабатывается',
'transportation-type': req.body
.queryResult.parameters['transportation-type'],
};
if (req.body.queryResult.parameters['places-count']) {
transportationData['places-count'] = req.body.queryResult
.parameters['places-count'];
}
if (req.body.queryResult.parameters['contact-person']) {
transportationData['contact-person'] = req.body.queryResult
.parameters['contact-person'];
}
if (req.body.queryResult.parameters['stowing-type']) {
transportationData['stowing-type'] = req.body.queryResult
.parameters['stowing-type'];
}
if (req.body.queryResult.parameters['cargo-type']) {
transportationData['cargo-type'] = req.body.queryResult
.parameters['cargo-type'];
}
if (req.body.queryResult.parameters['unloading-type']) {
transportationData['unloading-type'] = req.body.queryResult
.parameters['unloading-type'];
}
if (req.body.queryResult.parameters['loading-type']) {
transportationData['loading-type'] = req.body.queryResult
.parameters['loading-type'];
}
if (req.body.queryResult.parameters['trailer-type']) {
transportationData['trailer-type'] = req.body.queryResult
.parameters['trailer-type'];
}
if (req.body.queryResult.parameters['truck-type']) {
transportationData['truck-type'] = req.body.queryResult
.parameters['truck-type'];
}
if (req.body.queryResult.parameters['grain-type']) {
transportationData['grain-type'] = req.body.queryResult
.parameters['grain-type'];
}
if (req.body.queryResult.parameters['location-from']) {
transportationData['location-from'] = req.body.queryResult
.parameters['location-from'];
}
if (req.body.queryResult.parameters['location-to']) {
transportationData['location-to'] = req.body.queryResult
.parameters['location-to'];
}
if (req.body.queryResult.parameters['unloading-time']) {
transportationData['unloading-time'] = req.body.queryResult
.parameters['unloading-time'];
}
if (req.body.queryResult.parameters['loading-time']) {
transportationData['loading-time'] = req.body.queryResult
.parameters['loading-time'];
}
if (req.body.queryResult.parameters.period.startTime) {
transportationData['period-start'] = req.body.queryResult.parameters
.period.startTime;
transportationData['period-end'] = req.body.queryResult.parameters
.period.endTime;
}
if (req.body.queryResult.parameters.compatibility) {
transportationData.compatibility = req.body.queryResult.parameters
.compatibility;
}
if (req.body.queryResult.parameters.urgency) {
transportationData.urgency = req.body.queryResult.parameters.urgency;
}
if (req.body.queryResult.parameters.date) {
transportationData.date = req.body.queryResult.parameters.date;
}
if (req.body.queryResult.parameters['loading-time'].startTime) {
transportationData['loading-time-start'] = req.body.queryResult
.parameters['loading-time'].startTime;
transportationData['loading-time-end'] = req.body.queryResult
.parameters['loading-time'].endTime;
} else if (req.body.queryResult.parameters['loading-time']) {
transportationData['loading-time'] = req.body.queryResult
.parameters['loading-time'];
}
if (req.body.queryResult.parameters['unloading-time'].startTime) {
transportationData['unloading-time-start'] = req.body.queryResult
.parameters['unloading-time'].startTime;
transportationData['unloading-time-end'] = req.body.queryResult
.parameters['unloading-time'].endTime;
} else if (req.body.queryResult.parameters['unloading-time']) {
transportationData['unloading-time'] = req.body.queryResult
.parameters['unloading-time'];
}