¨4.0.1¨
This commit is contained in:
@@ -2,23 +2,43 @@
|
||||
|
||||
namespace Modules\Cart\Http\Controllers;
|
||||
|
||||
use Exception;
|
||||
use Modules\Cart\Facades\Cart;
|
||||
use Illuminate\Pipeline\Pipeline;
|
||||
use Illuminate\Routing\Controller;
|
||||
use Modules\Coupon\Entities\Coupon;
|
||||
use Modules\Coupon\Checkers\ValidCoupon;
|
||||
use Modules\Coupon\Checkers\MaximumSpend;
|
||||
use Modules\Coupon\Checkers\MinimumSpend;
|
||||
use Modules\Coupon\Checkers\CouponExists;
|
||||
use Modules\Coupon\Checkers\AlreadyApplied;
|
||||
use Modules\Coupon\Checkers\ExcludedProducts;
|
||||
use Modules\Coupon\Checkers\ApplicableProducts;
|
||||
use Modules\Coupon\Checkers\ExcludedCategories;
|
||||
use Modules\Coupon\Checkers\UsageLimitPerCoupon;
|
||||
use Modules\Cart\Http\Middleware\CheckItemStock;
|
||||
use Modules\Coupon\Checkers\ApplicableCategories;
|
||||
use Modules\Coupon\Checkers\UsageLimitPerCustomer;
|
||||
use Modules\Cart\Http\Requests\StoreCartItemRequest;
|
||||
use Modules\Coupon\Exceptions\MaximumSpendException;
|
||||
use Modules\Coupon\Exceptions\MinimumSpendException;
|
||||
use Modules\Cart\Http\Middleware\CheckProductIsInStock;
|
||||
use Modules\Cart\Http\Requests\UpdateCartItemRequest;
|
||||
|
||||
class CartItemController extends Controller
|
||||
{
|
||||
private $checkers = [
|
||||
private array $checkers = [
|
||||
CouponExists::class,
|
||||
AlreadyApplied::class,
|
||||
ValidCoupon::class,
|
||||
MinimumSpend::class,
|
||||
MaximumSpend::class,
|
||||
ApplicableProducts::class,
|
||||
ExcludedProducts::class,
|
||||
ApplicableCategories::class,
|
||||
ExcludedCategories::class,
|
||||
UsageLimitPerCoupon::class,
|
||||
UsageLimitPerCustomer::class,
|
||||
];
|
||||
|
||||
|
||||
/**
|
||||
* Create a new controller instance.
|
||||
*
|
||||
@@ -26,54 +46,93 @@ class CartItemController extends Controller
|
||||
*/
|
||||
public function __construct()
|
||||
{
|
||||
$this->middleware(CheckProductIsInStock::class)->only(['store', 'update']);
|
||||
$this->middleware(CheckItemStock::class)->only(['store', 'update']);
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Store a newly created resource in storage.
|
||||
*
|
||||
* @param \Modules\Cart\Http\Requests\StoreCartItemRequest $request
|
||||
* @return \Illuminate\Http\Response
|
||||
* @param StoreCartItemRequest $request
|
||||
*
|
||||
* @return \Modules\Cart\Cart
|
||||
*/
|
||||
public function store(StoreCartItemRequest $request)
|
||||
{
|
||||
Cart::store($request->product_id, $request->qty, $request->options ?? []);
|
||||
Cart::store(
|
||||
$request->product_id,
|
||||
$request->variant_id,
|
||||
$request->qty,
|
||||
$request->options ?? []
|
||||
);
|
||||
|
||||
return Cart::instance();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Update the specified resource in storage.
|
||||
*
|
||||
* @param mixed $cartItemId
|
||||
* @return \Illuminate\Http\Response
|
||||
* @param UpdateCartItemRequest $request
|
||||
* @param string $cartItemId
|
||||
*
|
||||
* @return \Modules\Cart\Cart
|
||||
*/
|
||||
public function update($cartItemId)
|
||||
public function update(UpdateCartItemRequest $request, string $cartItemId)
|
||||
{
|
||||
Cart::updateQuantity($cartItemId, request('qty'));
|
||||
|
||||
try {
|
||||
resolve(Pipeline::class)
|
||||
->send(Cart::coupon())
|
||||
->through($this->checkers)
|
||||
->thenReturn();
|
||||
} catch (MinimumSpendException | MaximumSpendException $e) {
|
||||
Cart::removeCoupon();
|
||||
$cartWithCoupon = null;
|
||||
$couponCode = request()->query('coupon_code');
|
||||
if ($couponCode) {
|
||||
$coupon = Coupon::findByCode($couponCode);
|
||||
try {
|
||||
resolve(Pipeline::class)
|
||||
->send($coupon)
|
||||
->through($this->checkers)
|
||||
->then(function ($coupon) use (&$cartWithCoupon) {
|
||||
Cart::applyCoupon($coupon);
|
||||
$cartWithCoupon = json_encode(Cart::instance());
|
||||
Cart::removeCoupon();
|
||||
});
|
||||
} catch (Exception) {
|
||||
//Just suppressing the exception
|
||||
}
|
||||
}
|
||||
|
||||
return Cart::instance();
|
||||
return $cartWithCoupon ?? Cart::instance();
|
||||
}
|
||||
|
||||
|
||||
/**
|
||||
* Remove the specified resource from storage.
|
||||
*
|
||||
* @param string $cartItemId
|
||||
* @return \Illuminhtate\Http\Response
|
||||
*
|
||||
* @return \Modules\Cart\Cart
|
||||
*/
|
||||
public function destroy($cartItemId)
|
||||
public function destroy(string $cartItemId)
|
||||
{
|
||||
Cart::remove($cartItemId);
|
||||
|
||||
return Cart::instance();
|
||||
$cartWithCoupon = null;
|
||||
$couponCode = request()->query('coupon_code');
|
||||
if ($couponCode) {
|
||||
$coupon = Coupon::findByCode($couponCode);
|
||||
try {
|
||||
resolve(Pipeline::class)
|
||||
->send($coupon)
|
||||
->through($this->checkers)
|
||||
->then(function ($coupon) use (&$cartWithCoupon) {
|
||||
Cart::applyCoupon($coupon);
|
||||
$cartWithCoupon = json_encode(Cart::instance());
|
||||
Cart::removeCoupon();
|
||||
});
|
||||
} catch (Exception) {
|
||||
//Just suppressing the exception
|
||||
}
|
||||
}
|
||||
|
||||
return $cartWithCoupon ?? Cart::instance();
|
||||
}
|
||||
}
|
||||
|
||||
Reference in New Issue
Block a user