Я работаю над системой резервирования ресурсов, и мне нужен совет по оптимизации логики проверки доступности ресурсов. Текущая реализация работает, но кажется неэффективной, поскольку выполняет ненужные проверки.
Вот сценарий:
У меня есть список ресурсов (например, устройств, комнат или любого доступного для бронирования объекта), хранящихся в 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.");
}
Мои опасения:
Ненужные проверки: Я считаю, что проверять каждое бронирование не следует Кстати, а есть ли более эффективный способ проверить только часть бронирований?
Проблемы с производительностью. По мере роста количества ресурсов и бронирований этот подход может плохо масштабироваться.
Если вы решали подобную проблему или у вас есть какие-либо идеи, я буду рад их услышать!
Заранее благодарим вас за ваши предложения.
Я работаю над [b]системой резервирования ресурсов[/b], и мне нужен совет по оптимизации логики проверки доступности ресурсов. Текущая реализация работает, но кажется неэффективной, поскольку выполняет ненужные проверки. Вот сценарий: [list] [*]У меня есть список ресурсов (например, устройств, комнат или любого доступного для бронирования объекта), хранящихся в resourcesList. [*]Каждый ресурс может иметь несколько бронирований, хранящихся в bookingList.< /li> Когда поступает запрос на бронирование, Мне нужно проверить, совпадают ли запрошенные даты с существующими бронированиями для этого ресурса. Если ресурс доступен, добавляю его в список подтвержденных бронирований. У каждого бронирования есть дата начала и дата окончания. [/list] Вот мой текущий код: [code]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);
// 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."); } [/code] Мои опасения: [list] [*][b]Ненужные проверки:[/b] Я считаю, что проверять каждое бронирование не следует Кстати, а есть ли более эффективный способ проверить только часть бронирований? [*][b]Проблемы с производительностью.[/b] По мере роста количества ресурсов и бронирований этот подход может плохо масштабироваться. [/list] Если вы решали подобную проблему или у вас есть какие-либо идеи, я буду рад их услышать! Заранее благодарим вас за ваши предложения.