File: //var/www/html/Modules/Cart/Http/Controllers/CartItemController.php
<?php
namespace Modules\Cart\Http\Controllers;
use EonVisualMedia\LaravelKlaviyo\Klaviyo;
use EonVisualMedia\LaravelKlaviyo\TrackEvent;
use Illuminate\Support\Facades\Auth;
use Modules\Cart\Facades\Cart;
use Illuminate\Pipeline\Pipeline;
use Illuminate\Routing\Controller;
use Modules\Coupon\Checkers\MaximumSpend;
use Modules\Coupon\Checkers\MinimumSpend;
use Modules\Cart\Http\Requests\StoreCartItemRequest;
use Modules\Coupon\Exceptions\MaximumSpendException;
use Modules\Coupon\Exceptions\MinimumSpendException;
use Modules\Cart\Http\Middleware\CheckProductIsInStock;
use Modules\Product\Entities\Product;
class CartItemController extends Controller
{
private $checkers = [
MinimumSpend::class,
MaximumSpend::class,
];
/**
* Create a new controller instance.
*
* @return void
*/
public function __construct()
{
$this->middleware(CheckProductIsInStock::class)->only(['store', 'update']);
}
/**
* Store a newly created resource in storage.
*
* @param \Modules\Cart\Http\Requests\StoreCartItemRequest $request
* @return \Illuminate\Http\Response
*/
public function store(StoreCartItemRequest $request)
{
Cart::store($request->product_id, $request->qty, $request->options ?? []);
$product = Product::findById($request->product_id);
$user = Auth::user();
if (isset($user->email)) {
Klaviyo::track(TrackEvent::make(
'Added to Cart',
[
'$value' => (int)$product->selling_price->convertToCurrentCurrency()->amount(),
'AddedTitle' => $product->name
],
[
'$email' => $user->email,
'$first_name' => $user->first_name,
'$last_name' => $user->last_name
],
));
}
return Cart::instance();
}
public function codStore(StoreCartItemRequest $request)
{
Cart::addTaxes($request, "cod");
return Cart::instance();
}
public function codRemove(StoreCartItemRequest $request)
{
Cart::addTaxes($request, "cod-remove");
return Cart::instance();
}
/**
* Update the specified resource in storage.
*
* @param mixed $cartItemId
* @return \Illuminate\Http\Response
*/
public function update($cartItemId)
{
Cart::updateQuantity($cartItemId, request('qty'));
try {
resolve(Pipeline::class)
->send(Cart::coupon())
->through($this->checkers)
->thenReturn();
} catch (MinimumSpendException|MaximumSpendException $e) {
Cart::removeCoupon();
}
return Cart::instance();
}
/**
* Remove the specified resource from storage.
*
* @param string $cartItemId
* @return \Illuminhtate\Http\Response
*/
public function destroy($cartItemId)
{
Cart::remove($cartItemId);
return Cart::instance();
}
/**
* Remove the specified resource from storage.
*
* @param string $cartItemId
* @return \Illuminhtate\Http\Response
*/
public function destroyCod(StoreCartItemRequest $request)
{
file_put_contents("cod-remove.json", json_encode($request->all));
//dd($request);
//Cart::remove($cartItemId);
return Cart::instance();
}
}