File: /home/mobilech/.trash/shop/app/Http/Controllers/api/v4/CartController.php
<?php
namespace App\Http\Controllers\api\v4;
use App\CPU\CartManager;
use App\CPU\Helpers;
use App\Http\Controllers\Controller;
use App\Model\Cart;
use Illuminate\Http\Request;
use Illuminate\Support\Facades\Validator;
use function App\CPU\translate;
class CartController extends Controller
{
public function cart(Request $request)
{
$user = Helpers::get_customer($request);
$cart = Cart::with('product:id,name,slug,current_stock,minimum_order_qty,variation')
->where(['customer_id' => $user->id])
->get();
if($cart) {
foreach($cart as $key => $value){
if(!isset($value['product'])){
$cart_data = Cart::find($value['id']);
$cart_data->delete();
unset($cart[$key]);
}
}
$cart->map(function ($data) {
$data['choices'] = json_decode($data['choices']);
$data['variations'] = json_decode($data['variations']);
$data['product']['total_current_stock'] = isset($data['product']['current_stock']) ? $data['product']['current_stock'] : 0;
if (isset($data['product']['variation']) && !empty($data['product']['variation'])) {
$variants = json_decode($data['product']['variation']);
foreach ($variants as $var) {
if ($data['variant'] == $var->type) {
$data['product']['total_current_stock'] = $var->qty;
}
}
}
unset($data['product']['variation']);
return $data;
});
}
return response()->json($cart, 200);
}
public function add_to_cart(Request $request)
{
$validator = Validator::make($request->all(), [
'id' => 'required',
'quantity' => 'required',
], [
'id.required' => translate('Product ID is required!')
]);
if ($validator->errors()->count() > 0) {
return response()->json(['errors' => Helpers::error_processor($validator)]);
}
$cart = CartManager::add_to_cart($request);
return response()->json($cart, 200);
}
public function update_cart(Request $request)
{
$validator = Validator::make($request->all(), [
'key' => 'required',
'quantity' => 'required',
], [
'key.required' => translate('Cart key or ID is required!')
]);
if ($validator->errors()->count() > 0) {
return response()->json(['errors' => Helpers::error_processor($validator)]);
}
$response = CartManager::update_cart_qty($request);
return response()->json($response);
}
public function remove_from_cart(Request $request)
{
$validator = Validator::make($request->all(), [
'key' => 'required'
], [
'key.required' => translate('Cart key or ID is required!')
]);
if ($validator->errors()->count() > 0) {
return response()->json(['errors' => Helpers::error_processor($validator)]);
}
$user = Helpers::get_customer($request);
Cart::where(['id' => $request->key, 'customer_id' => $user->id])->delete();
return response()->json(translate('successfully_removed'));
}
public function remove_all_from_cart(Request $request)
{
$validator = Validator::make($request->all(), [
'key' => 'required'
], [
'key.required' => translate('Cart key or ID is required!')
]);
if ($validator->errors()->count() > 0) {
return response()->json(['errors' => Helpers::error_processor($validator)]);
}
$user = Helpers::get_customer($request);
Cart::where(['customer_id' => $user->id])->delete();
return response()->json(translate('successfully_removed'));
}
}