Обработка запросов на бэкенде (Django)
У меня есть две конечные точки api
1- stockpurchases/ || stockpurchases/{id}/
2- stockpurchases/{id}/stocks/ || stockpurchases/{id}/stocks/{id}/
Итак, если кто-то хочет купить, он должен сначала создать складскую закупку, а затем добавить в нее акции. и когда кто-то ПОСТАВЛЯЕТ запас, я плюсую количество и сумму закупки.
Проблема в том, что если кто-то будет последовательно вызывать POST запрос в цикле, то операция с суммой пройдет некорректно.
Я хочу обрабатывать несколько запросов на бэкенде. Например, если сервер получает последовательные запросы на выполнение операции, как я могу заставить другие запросы ждать завершения первой процедуры. После этого обрабатывается второй запрос и т.д.
Модель покупки акций
class StockPurchase(models.Model):
qty = models.IntegerField(default=0)
amount = models.IntegerField(default=0)
Модель склада
class Stock(models.Model):
stockpurchase = models.ForeignKey("StockPurchase", on_delete=models.CASCADE, related_name='stocks')
product = models.ForeignKey("Product", on_delete=models.CASCADE, related_name='stocks')
project = models.ForeignKey("Project", on_delete=models.CASCADE, related_name='stocks')
rate = models.IntegerField()
def save(self, *args, **kwargs):
if not self.pk:
self.stockpurchase.amount += self.rate
self.stockpurchase.qty += 1
self.stockpurchase.save()
super().save()
Так что если я буду звонить так с ожиданием без проблем
async function create() {
for (let i = 0; i < 10; i++) {
let response = await fetch(
"http://localhost:8000/api/stockpurchases/2/stocks/",
{
method: "POST",
body: bodyContent,
headers: headersList,
}
);
}
}
но если вызвать его без await async функции, то сумма покупки акций будет неправильной вот так
for (let i = 0; i < 10; i++) {
let response = fetch("http://localhost:8000/api/stockpurchases/2/stocks/", {
method: "POST",
body: bodyContent,
headers: headersList,
});
}