Как структурировать доступные даты модели «Место» в системе бронирования? (пн goose и mongoDB) - PullRequest
0 голосов
/ 17 апреля 2020

Я m designing a booking system(a place reservation system) and i У меня возникли проблемы при разработке схемы "Место". Мне нужно следить за его доступностью. В основном мне нужно найти, доступен ли определенный период времени, выбранный пользователем, или нет. Например, пользователь выбирает апрель-май в качестве времени бронирования. Как мне структурировать его так, чтобы я мог узнать, был ли уже взят апрель-май?

Вот что я сделал до сих пор: На моей схеме «Место». я добавил поле доступности:

availability: [
        {
            moveIn: { type: Date },
            moveOut: { type: Date },
            qty: { type: Number }
        }
    ]

я добавил количество, чтобы узнать, сколько человек забронировали за определенный период времени.

1 Ответ

1 голос
/ 17 апреля 2020

Этот лог c будет зарезервирован для нескольких команд javascript и mon goose, это действительно ваше дело, но я бы порекомендовал что-то вроде следующего:

Ваша схема в порядке, когда пользователь идет, чтобы проверить книгу, вы должны сначала проверить, доступна ли она.

Вы можете сделать это, извлекая и раскручивая текущие даты в свои собственные массивы. Это также сортирует даты по порядку.

var datesIn = {};
Book.aggregate([
    {$unwind: '$availability'},
    {$sort: {'availability.moveIn': 1}}
], function (err, result) {
    datesIn = result;
});

Сделайте это снова для дат:

var datesOut = {};
Book.aggregate([
    {$unwind: '$availability'},
    {$sort: {'availability.moveOut': 1}}
], function (err, result) {
    datesIn = result;
});

Индекс каждого из этих массивов теперь соответствует времени извлечения пользователем , Если он пуст, он доступен, в противном случае вы можете использовать библиотеку, например момент. js, чтобы сравнить доступность дат.

Вот хороший пост об этом: Проверьте, находится ли одна дата между двумя датами

Наконец, как только вы найдете доступность, вы можете нажать sh в новая проверка, например:

Books.findOneAndUpdate({'Searching criteria goes here'}, {
 $push : {
    availability :  {
             "moveIn": firstDate,
             "moveOut": secondDate, 
             "qty": quantityVal
           }  
  }
});

Это должно добавить к массиву availability в вашем документе.

ПРИМЕЧАНИЕ

Я уверен, что вы слышали о не изобретать заново колесо, есть несколько хороших библиотек для подобных вещей, вот что я нашел:

https://www.npmjs.com/package/availability-schedule

, похоже, имеет функцию isAvailable (startDate, endDate) , :)

...