Я занимаюсь разработкой системы, которая может иметь основной счет и субсчет основного счета.
Система имеет функцию перевода кредита с основного счета на другой основной счет.
Субсчет может перевести кредит основной учетной записи на другую основную учетную запись.
public function transferCredit(Request $request)
{
$authUser = User::find(auth()->user()->sub_user_parent);
$this->validate($request, [
'credit' => 'required|wallet_check_auth',
], [
'wallet_check_auth' => 'Not enough balance. Your current balance is ' . $authUser->wallet
]);
$user = User::find($request->id);
ProcessCredit::dispatch($authUser, $user, $request->credit);
return true;
}
ProcessCredit.php (Мой класс работы)
public function handle()
{
User::where('id', $this->sender->id)->decrement('wallet', $this->amount);
User::where('id', $this->receiver->receive_id)->increment('wallet', $this->amount);
}
Сценарий:
Основной счет A имеет кредит 100.
Субсчет основного счета A и основного аккаунта A одновременно выполняет вход и перевод на Основной счет B.
Проблема: Кредитпроверка проверки не работает, потому что оба запроса приходят вместе, и проверочный кредит равен 100. Кредит основного счета A в конечном итоге становится -100, потому что два запроса выполнялись вместе и проходят проверку до того, как 1-й запрос вычтет кредит из основного счетаA.
Я попытался реализовать очередь, чтобы убедиться, что 1-й запрос завершен, только запустить 2-й запрос для этой функции, но затем ямне не повезло.
Есть решение, с которым я могу столкнуться? Поскольку мне действительно нужна дополнительная учетная запись, чтобы иметь возможность переводить кредит от имени своей основной учетной записи.