Ограничение на создание нескольких бронирований подряд

Сервер BOOCO Meteor (v 1.x) / Примеры правил бронирования

Описание

По умолчанию между бронированиями, созданными одним и тем же пользователем, должно пройти не менее 20 минут (1 200 000 мс). При необходимости значение, используемое по умолчанию, можно изменить.

Принцип работы

  • Создается переменная diff, в которой хранится значение, которое получается путем вычитания из времени начала нового бронирования (значение переменной $newEvent.start) времени конца предыдущего бронирования (значение переменной $end). Результатом вычислений является период времени (в мс) от начала нового бронирования до завершения предыдущего бронирования.
  • Система выполняет поиск всех бронирований выбранного ресурса, созданных данным пользователем ({ "$expr": { "$eq": ["$organizer", "$newEvent.organizer"] } } ) ({ "$expr": { "$eq": ["$venueId", "$newEvent.venueId"] } } ), у которых значение переменной diff больше нуля и меньше 20 минут (1 200 000 мс).
  • Если система находит такие бронирования, то отображается сообщение о конфликте.

Пример использования

[
  {
    "$addFields": {
      "diff": { "$subtract": [{ "$toDate": "$newEvent.start" }, {"$toDate":
"$end" }] }
    }
  },
  {
    "$match": {
      "$and": [
        { "$expr": { "$eq": ["$venueId", "$newEvent.venueId"] } },
        { "$expr": { "$eq": ["$organizer", "$newEvent.organizer"] } },
        { "$and": [{ "diff": { "$lt": 1200000 } }, { "diff": { "$gte": 0 }
}] }
      ]
    }
  },
  {
    "$addFields": {
      "message": "Капсулу сна нельзя бронировать подряд"
    }
  }
]