update: add inventory limit

This commit is contained in:
tokumeikoi 2022-06-30 03:18:30 +08:00
parent cc6b07d7b8
commit 8a8c6dd116
3 changed files with 42 additions and 1 deletions

View File

@ -9,6 +9,7 @@ use App\Models\Payment;
use App\Services\CouponService; use App\Services\CouponService;
use App\Services\OrderService; use App\Services\OrderService;
use App\Services\PaymentService; use App\Services\PaymentService;
use App\Services\PlanService;
use App\Services\UserService; use App\Services\UserService;
use Illuminate\Http\Request; use Illuminate\Http\Request;
use Illuminate\Support\Facades\Cache; use Illuminate\Support\Facades\Cache;
@ -75,7 +76,9 @@ class OrderController extends Controller
abort(500, __('You have an unpaid or pending order, please try again later or cancel it')); abort(500, __('You have an unpaid or pending order, please try again later or cancel it'));
} }
$plan = Plan::find($request->input('plan_id')); $planService = new PlanService($request->input('plan_id'));
$plan = $planService->plan;
$user = User::find($request->session()->get('id')); $user = User::find($request->session()->get('id'));
if (!$plan) { if (!$plan) {
@ -153,6 +156,10 @@ class OrderController extends Controller
} }
} }
if (!$planService->decrementInventory()) {
abort(500, __('Failed to create order'));
}
if (!$order->save()) { if (!$order->save()) {
DB::rollback(); DB::rollback();
abort(500, __('Failed to create order')); abort(500, __('Failed to create order'));

View File

@ -249,6 +249,11 @@ class OrderService
return false; return false;
} }
} }
$planService = new PlanService($order->plan_id);
if (!$planService->incrementInventory()) {
DB::rollBack();
return false;
}
DB::commit(); DB::commit();
return true; return true;
} }

View File

@ -0,0 +1,29 @@
<?php
namespace App\Services;
use App\Models\Plan;
class PlanService
{
public $plan;
public function __construct(int $planId)
{
$this->plan = Plan::lockForUpdate()->find($planId);
}
public function incrementInventory()
{
if ($this->plan->inventory_limit !== NULL) {
return $this->plan->increment('inventory_limit');
}
}
public function decrementInventory()
{
if ($this->plan->inventory_limit !== NULL) {
return $this->plan->decrement('inventory_limit');
}
}
}