Edit File: CartService.php
<?php namespace App\Services\User; use App\Http\Resources\Api\User\ProductCartItemsResource; use App\Models\CartItem; use App\Models\Product; use App\Services\BaseService; use App\Traits\CartOrderTrait; class CartService extends BaseService { use CartOrderTrait; public function __construct() { parent::__construct(CartItem::class); } public function getCartItems() { $cartDetails = $this->getUserCartDetails(true); if (isset($cartDetails['cart_items']) && !empty($cartDetails['cart_items'])) { $cartDetails['cart_items'] = ProductCartItemsResource::collection($cartDetails['cart_items']); } return $cartDetails; } private function getUserCartDetails(bool $includeCartItems = false) { $authUser = auth()->user(); $userCartItems = CartItem::with('product')->where('user_id', $authUser->id)->get(); $cartHasItems = $userCartItems->isNotEmpty(); $cartTotalSum = $cartHasItems ? $this->calculateCartSummation($userCartItems) : 0; $isMinimumOrderReached = $cartHasItems ? $this->providerMinumumOrderAmount( $userCartItems->first()->provider_id, $cartTotalSum ) : false; $response = [ 'details' => [ 'total_sum' => number_format($cartTotalSum, 2), 'is_minimum_order_reached' => $isMinimumOrderReached, 'is_user_set_location' => isset($authUser->lat) && isset($authUser->lng) && isset($authUser->neighborhood_to_delivered_id) ] ]; if ($includeCartItems) { $response['cart_items'] = $userCartItems; } return $response; } public function indpendentCartCalulations() { return $this->getUserCartDetails(); } public function create($request) { $product = Product::find($request['product_id']); //check if another product is in cart for another provider if (CartItem::where([['user_id', auth()->id()], ['provider_id', '!=', $product->provider_id]])->exists()) { CartItem::where([['user_id', auth()->id()], ['provider_id', '!=', $product->provider_id]])->delete(); } $request['provider_id'] = $product->provider_id; if (CartItem::where('user_id', auth()->id())->where('product_id', $product->id)->exists()) { $cartItem = CartItem::where('user_id', auth()->id())->where('product_id', $product->id)->first(); $cartItem->update(['quantity' => $request['quantity']]); return [ 'key' => 'success', 'msg' => __('apis.user_cart.item_qty_updated'), ]; } $this->model::create( array_merge( $request, [ 'product_addons' => isset($request['classification']) && !empty($request['classification']) ? array_column($request['classification'], 'addon_id') : null, ] ) ); return [ 'key' => 'success', 'msg' => __('apis.user_cart.item_added'), ]; } public function updateQty($request, $id) { $isItemDeleted = false; $authUser = auth()->user(); $cartItem = $this->model::where('user_id', $authUser->id)->where('id', $id)->first(); if (!$cartItem) { return [ 'key' => 'fail', 'msg' => __('apis.user_cart.item_not_found'), 'details' => [] ]; } if ($request['quantity'] == 0) { $cartItem->delete(); $isItemDeleted = true; } else { $cartItem->update($request); } return [ 'key' => 'success', 'msg' => $isItemDeleted ? __('apis.user_cart.item_removed') : __('apis.user_cart.item_qty_updated'), 'details' => $this->getUserCartDetails() ]; } public function delete($id) { $cartItem = $this->model::where('user_id', auth()->id())->where('id', $id)->first(); $cartItem->delete(); return [ 'key' => 'success', 'msg' => __('apis.user_cart.item_removed'), 'details' => $this->getUserCartDetails() ]; } public function deleteAllCartItems() { $this->model::where('user_id', auth()->id())->delete(); return [ 'key' => 'success', 'msg' => __('apis.user_cart.cart_items_deleted'), ]; } public function getCartItemsCount() { return $this->model::where('user_id', auth()->id())->count(); } }
Back to File Manager