改进 模块 用户控制器

This commit is contained in:
iVampireSP.com 2023-01-18 00:13:19 +08:00
parent 610f690b72
commit 0ceef6c7b7
No known key found for this signature in database
GPG Key ID: 2F7B001CA27A8132

View File

@ -2,10 +2,8 @@
namespace App\Http\Controllers\Modules; namespace App\Http\Controllers\Modules;
use App\Exceptions\User\BalanceNotEnoughException;
use App\Http\Controllers\Controller; use App\Http\Controllers\Controller;
use App\Models\Host; use App\Models\Host;
use App\Models\Transaction;
use App\Models\User; use App\Models\User;
use Illuminate\Http\JsonResponse; use Illuminate\Http\JsonResponse;
use Illuminate\Http\Request; use Illuminate\Http\Request;
@ -53,22 +51,46 @@ public function hosts(User $user): JsonResponse
return $this->success($hosts); return $this->success($hosts);
} }
public function reduce(Request $request, User $user): JsonResponse public function update(Request $request, User $user): JsonResponse
{ {
$this->validate($request, [ $this->validate($request, [
'amount' => 'required|numeric|min:0.01|max:10000', 'balance' => 'required|numeric|min:-10000|max:10000',
'description' => 'required|string', 'description' => 'required|string',
]); ]);
$module = auth('module')->user(); $module = $request->user('module');
$transaction = new Transaction();
try { $balance = $request->input('balance');
$transaction->reduceAmountModuleFail($user->id, $module->id, $request->input('amount'), $request->input('description'));
} catch (BalanceNotEnoughException) { if ($balance < 0) {
return $this->error('余额不足'); // 使用 bc取 balance 绝对值
$balance = bcsub(0, $balance, 4);
// 如果用户余额不足,抛出异常,使用 bc 函数判断
if (bccomp($user->balance, $balance, 2) === -1) {
return $this->error('用户余额不足。');
} }
return $this->success(); $user->reduce($balance, $request->description, true);
$module->charge($balance, 'balance', $request->description, [
'user_id' => $user->id,
]);
} else {
// 如果模块余额不足,抛出异常,使用 bc 函数判断
if (bccomp($module->balance, $balance, 2) === -1) {
return $this->error('模块余额不足。');
} }
$module->reduce($balance, $request->description, true, [
'user_id' => $user->id,
'payment' => 'module_balance'
]);
$user->charge($balance, 'module_balance', $request->description);
}
return $this->updated();
}
} }