From fd4a4bf5ea36c16d2ed9d7837481939576a2668c Mon Sep 17 00:00:00 2001 From: KKlochko Date: Mon, 19 Jun 2023 20:24:14 +0300 Subject: [PATCH] Add the addItem method, that add an item to a Cart, and its route. --- .../Controllers/API/v2/CartController.php | 58 +++++++++++++++++++ routes/api.php | 1 + 2 files changed, 59 insertions(+) diff --git a/app/Http/Controllers/API/v2/CartController.php b/app/Http/Controllers/API/v2/CartController.php index ac5b547..f37619c 100644 --- a/app/Http/Controllers/API/v2/CartController.php +++ b/app/Http/Controllers/API/v2/CartController.php @@ -9,6 +9,7 @@ use App\Models\Cart; use App\Models\User; use App\Models\City; use App\Models\Company; +use App\Models\Item; use Illuminate\Http\Request; use App\Http\Controllers\Controller; @@ -112,6 +113,63 @@ class CartController extends Controller ]); } + public function addItem(Request $request) { + $matrixUsername = $request->input('matrixUsername') ?? ''; + $itemName = $request->input('itemName') ?? ''; + $itemCount = $request->input('itemCount') ?? ''; + + // check for not valid user + $validation = User::validate_with_matrix_username($matrixUsername); + if(array_key_exists('error', $validation)) + return response()->json($validation); + + // check for not valid item + $validation = Item::validate_with_name($itemName); + if(array_key_exists('error', $validation)) + return response()->json($validation); + + if($itemCount == 0) + return response()->json([ + 'error' => 'The item count is zero!!! Please, choose the count!!!', + ]); + + // Get objects + $user = User::where('matrix_username', $matrixUsername)->first(); + + // Select template item + $item = Item::where('name', $itemName) + ->where('count', 0) + ->first(); + + $cart = Cart::firstOrCreate([ + 'user_id' => $user->id, + 'status' => 'CART' + ]); + + if($cart->isItemIn($item)) { + $cartItem = $cart->getItem($itemName); + $cartItem->setCount($cartItem->getCount() + $itemCount); + + return response()->json([ + 'ok' => 'The item count is changed successfully', + 'name' => $cartItem->name, + 'uuid' => $cartItem->uuid, + 'count' => $cartItem->count, + ]); + } + + // Clone template value: + $cartItem = $item->clone($itemCount); + $cart->addItemId($cartItem->id); + + return response()->json([ + 'ok' => 'The item added successfully', + 'name' => $item->name, + 'uuid' => $item->uuid, + 'count' => $cartItem->count, + ]); + } + /** * Show the form for creating a new resource. */ diff --git a/routes/api.php b/routes/api.php index 8bba86e..60c8c27 100644 --- a/routes/api.php +++ b/routes/api.php @@ -32,6 +32,7 @@ Route::group([ // Cart Route::post('select-city', 'CartController@selectCity'); Route::post('select-company', 'CartController@selectCompany'); + Route::post('add-item', 'CartController@addItem'); // User Route::post('register', 'UserController@register');