Я пытаюсь внедрить систему бронирования номеров с MongoDB в качестве базы данных, Apollo GraphQL и экспресс-сервером.
У меня есть коллекции в моей базе данных: одна для комнат и одна для бронирования.Чтобы проверить доступность, система находит все заказы, которые в настоящее время находятся в базе данных, и проверяет, в какой комнате есть доступность для указанного временного интервала.Если система бронирует комнату, она вставляет новую запись в базу данных.
Проблема заключается в следующем сценарии: два запроса на бронирование для одной и той же комнаты одновременно:
booking request 1 -> check for available rooms
booking request 2 -> check for available rooms
booking request 1 -> read request success (display available rooms)
booking request 2 -> read request success (display available rooms)
booking request 1 -> write a new record to the db (new booking)
booking request 2 -> write a new record to the db (new booking) but this conflicts with booking 1.
Как я могу гарантировать, что одна комната никогда не будет иметь конфликтующих бронирований?
Проблема в том, что у меня есть одна заявка на доступность и другая заявка, записывающая бронь в БД.