Я довольно новичок в node.js / mongoose, и я столкнулся с некоторыми трудностями, заставляя мой код работать как задумано. По сути, у меня есть Массив, содержащий некоторые идентификаторы в отсортированном порядке, и я хочу проверить мои резервирования, если они содержат эти идентификаторы в определенном состоянии (та же дата резервирования, временной интервал и т. Д.)
Кажется, я не могу заставить свою логику работать, которая в основном должна использовать следующий подход: прогонять массив таблиц от индекса 0 до длины индекса-1, для каждого индекса должен быть запрос findOne ({]), если нет резервирования существует с этим идентификатором таблицы, резервирование должно быть помещено и выйти из цикла, если резервирование существует, перейти к следующему индексу и повторять, пока массив не будет итеративным образом от 0 ... n (особый порядок, в котором сортируется массив, важен здесь следует всегда отдавать предпочтение наименее подходящим). Если ни один из таблиц не является «свободным» для создания нового резервирования, он должен отправить ответное сообщение о том, что каждая таблица уже зарезервирована. Кто-нибудь, кто мог бы помочь мне в моей проблеме? Буду признателен за любые подсказки!
app.post('/api/reservations', (req, res) => {
const resDate = new Date(req.body.reservationDate).toISOString();
const queryDate = new Date(req.body.reservationDate);
const tableDict = req.body.tableDict;
const slot = req.body.timeSlot;
const seats = req.body.seats;
const restaurant = req.body.restaurant;
const customer = req.body.customer;
const comment = req.body.comment;
function gteQueryDate(date) {
return date.toISOString();
}
function lteQueryDate(date) {
date.setDate(date.getDate() + 1);
return date.toISOString();
}
const gteDate = gteQueryDate(queryDate);
const lteDate = lteQueryDate(queryDate);
const sortedTables = [];
for (i = 0; i < tableDict[slot].length - 1; i++) {
if (tableDict[slot][i] !== null && tableDict[slot][i].seats >= seats) {
sortedTables.push([tableDict[slot][i]._id, tableDict[slot][i].seats]);
}
}
sortedTables.sort(function(a, b) {
return a[1] - b[1];
});
var createReservation = function(tableId) {
console.log("called function with id : " + tableId);
Reservation.findOne({
'restaurant': restaurant,
'timeSlot.slot': slot,
'timeSlot.table': tableId,
'reservationDate': {
'$gte': gteDate,
'$lte': lteDate
}
})
.then(reservation => {
if (!reservation) {
console.log("can create reservation with id: " + tableId);
var timeSlot = [{
'slot': slot,
'table': tableId
}];
const newReservation = new Reservation({
seats: seats,
comment: comment,
timeSlot: timeSlot,
customer: customer,
restaurant: restaurant,
reservationDate: resDate
});
newReservation.save()
.then(result => {
res.send(result);
})
.catch(err => {
console.log(err);
});
} else {
console.log("reservation with id: " + tableId + " exists already.");
}
})
.catch(err => {
console.log(err);
});
}
for (j = 0; j < sortedTables.length; j++) {
var tableId = sortedTables[j][0];
createReservation(tableId);
}
});