add endpoint for update quantity of products (min:1, max:10) add endpoint for removing product from cart
84 lines
2.4 KiB
PHP
84 lines
2.4 KiB
PHP
<?php
|
|
|
|
namespace App\Http\Controllers;
|
|
|
|
use App\Actions\AddProductToCartAction;
|
|
use App\Actions\GetActiveUserCartAction;
|
|
use App\Actions\RemoveProductFromCartAction;
|
|
use App\Actions\UpdateProductInCartAction;
|
|
use App\Data\AddToCartDTO;
|
|
use App\Http\Requests\AddProductToCartRequest;
|
|
use App\Http\Requests\RemoveProductFromCartRequest;
|
|
use App\Http\Requests\UpdateProductInCartRequest;
|
|
use App\Http\Resources\CartResource;
|
|
use Illuminate\Support\Facades\Auth;
|
|
|
|
class CartController extends Controller
|
|
{
|
|
/**
|
|
* Store a newly created resource in storage.
|
|
*/
|
|
public function store(AddProductToCartRequest $request, AddProductToCartAction $addProductAction)
|
|
{
|
|
$addToCartData = AddToCartDTO::fromRequest($request);
|
|
|
|
$cart = $addProductAction->execute($addToCartData, Auth::user());
|
|
|
|
return new CartResource($cart);
|
|
|
|
}
|
|
|
|
/**
|
|
* Display the specified resource.
|
|
*/
|
|
public function show(GetActiveUserCartAction $action)
|
|
{
|
|
return new CartResource($action->execute(Auth::user()));
|
|
}
|
|
|
|
/**
|
|
* Update the specified resource in storage.
|
|
*/
|
|
public function update(UpdateProductInCartRequest $request, UpdateProductInCartAction $action)
|
|
{
|
|
$updateCartData = AddToCartDTO::fromRequest($request);
|
|
$cart = $action->execute($updateCartData, $request->user());
|
|
|
|
return new CartResource($cart);
|
|
}
|
|
|
|
/**
|
|
* Remove the specified resource from storage.
|
|
*/
|
|
public function destroy(RemoveProductFromCartRequest $request, RemoveProductFromCartAction $action)
|
|
{
|
|
$user = $request->user();
|
|
try {
|
|
$cart = $action->execute($request->productId, $user);
|
|
|
|
return new CartResource($cart);
|
|
} catch (ModelNotFoundException $e) {
|
|
|
|
Log::error('No active cart found when removing a product from cart.', [
|
|
'user' => $user->id,
|
|
'error' => $e->getMessage(),
|
|
]);
|
|
|
|
return response()->json([
|
|
'message' => 'No active cart found.',
|
|
], 404);
|
|
|
|
} catch (MultipleRecordsFoundException $e) {
|
|
Log::error('Multiple active carts found for the user', [
|
|
'user' => $user->id,
|
|
'error' => $e->getMessage(),
|
|
]);
|
|
|
|
return response()->json([
|
|
'message' => 'Multiple Active carts found.',
|
|
], 409);
|
|
}
|
|
|
|
}
|
|
}
|