Добрый день.
Кто в TypeORM и вообще в синхронизации чтения/записи в бд шарит?
Допустим есть модель Slot и уже имеется в таблице три слота с userId null.
И 100 юзеров в 0.0001 милисекунду постучится чтобы занять любой свободный. нужно чтобы первые три человека заняли слоты, остальным понятное дело SorryException.
Cуть проблемы в том, что нельзя сначала
const slot = await Slot.findOne({where: { userId: null }});
а потом
slot.userId = user.id;
await slot.save();
Ибо тогда все, кому нашло свободный слот, а таких юзеров будет больше 3, получат success респонс.
На деле же запишет только последнего юзера и то, к примеру, только в первый слот, остальные два останутся пустые.
метод
Slot.update(...)
не подходит ибо он апдейтит сразу все записи. с queryBuilder-ом та же ситуация. не возможно задать .limit(1) при использовании sqlite. На проде же будет postrgesql.
Сделать синхронизацию средствами ноды не могу ибо будет запускаться много кластеров.
Есть идеи?