Вот сценарий:
- У меня есть список ресурсов (например, устройств, комнат или любого доступного для бронирования объекта), хранящихся в resourcesList.
- Каждый ресурс может иметь несколько бронирований, хранящихся в bookingList.< /li>
Когда поступает запрос на бронирование, Мне нужно проверить, совпадают ли запрошенные даты с существующими бронированиями для этого ресурса. Если ресурс доступен, добавляю его в список подтвержденных бронирований. У каждого бронирования есть дата начала и дата окончания.
Код: Выделить всё
for (let resource of resourceList) {
if (resource.status === "Booked") {
const resourceBookings = bookingList.filter(booking => booking.resourceId === resource.resourceId);
// Check if the resource is available for the requested dates
const isAvailable = resourceBookings.every(booking => {
const existingStart = new Date(booking.startDate);
const existingEnd = new Date(booking.endDate);
return endDate < existingStart || startDate > existingEnd;
});
// If available and still need resources, add to the booking
if (isAvailable && availableResources.length < requiredResources) {
availableResources.push(resource.resourceId);
newBookings.push({
resourceId: resource.resourceId,
startDate: startDate.toISOString().split("T")[0],
endDate: endDate.toISOString().split("T")[0]
});
}
}
}
if (newBookings.length > 0) {
console.log("Booking made after checking dates:", newBookings);
} else {
console.log("No resources available for the requested dates.");
}
- Ненужные проверки: Я считаю, что проверять каждое бронирование не следует Кстати, а есть ли более эффективный способ проверить только часть бронирований?
- Проблемы с производительностью. По мере роста количества ресурсов и бронирований этот подход может плохо масштабироваться.
Заранее благодарим вас за ваши предложения.
Подробнее здесь: https://stackoverflow.com/questions/793 ... ing-system