Обработка одинаковых одновременных реквестов
Есть метод в контроллере апи, этот метод принимает модель сущности. Внутри проверяется, существует ли такая сущность и если нет, то мы ее создаем. Если сущность уже есть, то мы ничего не делаем.
Возникла проблема при куче параллельных одинаковых запросов к этому апи, т.е. с одной и той же сущностью. Если запросы идут совсем рядом, то для них обоих сущность не существует и создается в обоих случаях, хотя нам нужно только 1 создание.
Вопрос: как правильно избежать таких ситуаций? Сейчас у нас несколько таких методов с похожим поведением в приведенном кейсе.
UPD: сущности создаются в Mongo, но я не вижу возможности делать проверку ее средствами. Речь идет не о простой проверке уникальных полей в коллекции. Связи сложнее. Да, просто с полем Name может помочь Unique Constraints on Arbitrary Fields, но что делать, если уникальной должна быть комбинация полей, к примеру Name + Type? Или вообще по неполному совпадению одного из филдов и полному другого?
В общем, интересует возможность делать проверку именно из кода.
[HttpPost("entity")]
public async Task<EntityView> CreateEntity(
[FromBody] EntityModel payload)
{
var existedEntity = await GetEntityByName(payload.Name);
if (existedEntity != null)
{
return existedEntity.ToView();
}
var result = await CreateEntity(payload);
return result.ToView();
}