Здравствуйте, проблема такая - есть возможность резервации предмета на определенное время, и есть функция которая показывает статус данного предмета. Суть такая - отображение статуса должно быть всегда истинным, т.е. нам надо предметы которые не помечены как "В процессе" помечать статусом N, если время старта резервации уже вышло.
У нас идет выборка сначала всех сервисов, а у них уже должно быть соответственно статус - есть свободные предметы \ нету.
Вижу только два решения этой задачи:
1. Для каждого найденного сервиса запускать функцию, которая будет проходиться по всем её зарезервированным предметам
2. Создавать setTimeout на созданный заказ, который по предполагаемому началу его резервации должен будет проверить статус
Первый способ мне кажется более трудозатратным, т.к. приходится выполнять слишком много действий.
Но у второго очень много нюансов, это - если сервер упадет, то все эти timeout'ы пропадут, да и памяти наверное будет много занимать.
ZloyDyadka: в принципе можно и 2, в setTimeout можно хранить только _id резерва, а нужные данные вытягивать по срабатыванию просрочки, чтобы не занимать память. Чтобы при падении сервера не потерять данные, храните все активные пары ключ-время просрочки в базе в отдельной коллекции. При перезапуске считывайте их оттуда, по завершению работы с резервом - удаляйте.
По моему вы велосипед изобретаете. Делаете отдельное поле в БД со временем резервации. setTimeout периодически пробегает по базе и проверяет разницу во времени создания и неким временем просрочки (либо вообще устанавливаете дату просрочки и просто сравниваете с текущим). Некупленных помечает обратно доступными. Даже если сервер перезапустится, то следующая проверка выявит старые заказы.