File "CartApiController.php"
Full Path: /home/clickysoft/public_html/jmapi5.clickysoft.net/app/Http/Controllers/Api/V1/User/CartApiController.php
File size: 6.65 KB
MIME-type: text/x-php
Charset: utf-8
<?php
namespace App\Http\Controllers\Api\V1\User;
use App\Http\Controllers\Controller;
use App\Http\Controllers\Traits\MediaUploadingTrait;
use App\Http\Requests\User\StoreCartRequest;
use App\Http\Resources\User\CartResource;
use App\Models\Cart;
use Gate;
use Illuminate\Http\Request;
use Symfony\Component\HttpFoundation\Response;
class CartApiController extends Controller
{
use MediaUploadingTrait;
public function index()
{
$cart_items = Cart::where('user_id', auth()->id())
->get();
CartResource::withoutWrapping();
return CartResource::collection($cart_items);
}
public function update_quantity(Request $request, Cart $cart)
{
abort_if(Gate::denies('update-record', $cart), Response::HTTP_FORBIDDEN, '403 Forbidden');
$request->validate([
'quantity' => 'required|integer|min:1',
]);
$cart->quantity = $request->quantity;
$cart->save();
return (new CartResource($cart))
->response()
->setStatusCode(Response::HTTP_CREATED);
}
public function update_quantity_bulk(Request $request)
{
$request->validate([
'items' => 'required|array',
'items.*.id' => 'required|exists:carts,id,user_id,'.auth()->id(),
'items.*.quantity' => 'required|integer|gt:0',
],[
'items.*.id.required' => 'Id for item #:position is required.',
'items.*.id.exists' => 'Id for item #:position is invalid.',
'items.*.quantity.required' => 'Quantity for item #:position is required.',
'items.*.quantity.integer' => 'Quantity for item #:position must be an integer.',
'items.*.quantity.gt' => 'Quantity for item #:position must be greater than 0.',
]);
\DB::beginTransaction();
try {
foreach ($request->get('items', []) as $item){
$cart = Cart::find($item['id']);
$cart->quantity = $item['quantity'];
$cart->save();
}
\DB::commit();
return response()
->json(['message' => 'Cart items updated successfully'], Response::HTTP_OK);
}catch (\Exception $e){
\Log::channel('db_errors')->info('Record Update Error : Cart items bulk');
\Log::channel('db_errors')->info($e->getMessage());
\DB::rollBack();
return response()
->json([
'message' => "Cart not updated.",
'errors' => ["error" => ["Unable to update cart items."]]
], Response::HTTP_INTERNAL_SERVER_ERROR);
}
}
public function store(StoreCartRequest $request)
{
if ($request->hasFile('attachment')){
$attachment = $this->storePDF($request->file('attachment'), auth()->id(), 'order');
}
$cart = Cart::create(
array_merge($request->validated(),
['user_id' => auth()->id(),
'attachment' => $attachment ?? null
])
);
return (new CartResource($cart))
->response()
->setStatusCode(Response::HTTP_CREATED);
}
public function show(Cart $cart)
{
return new CartResource($cart);
}
/*public function update(StoreCartRequest $request, Cart $cart)
{
abort_if(Gate::denies('update-record', $cart), Response::HTTP_FORBIDDEN, '403 Forbidden');
$attachment = $cart->attachment;
if ($request->hasFile('attachment')){
if ($attachment){
$this->deletePDF($attachment, 'order');
}
$attachment = $this->storePDF($request->file('attachment'), auth()->id(), 'order');
}
$cart->update(
array_merge(
$request->validated(),
['attachment' => $attachment]
)
);
return (new CartResource($cart))
->response()
->setStatusCode(Response::HTTP_CREATED);
}*/
public function destroy(Cart $cart)
{
abort_if(Gate::denies('update-record', $cart), Response::HTTP_FORBIDDEN, '403 Forbidden');
try {
$cart->delete();
return response()
->json(['message' => 'Cart deleted successfully'], Response::HTTP_OK);
}catch (\Exception $e){
\Log::channel('db_errors')->info('Record Deletion Error : Cart -> '.$cart->id);
\Log::channel('db_errors')->info($e->getMessage());
return response()
->json([
'message' => "Record not deleted.",
'errors' => ["error" => ["Unable to delete cart."]]
], Response::HTTP_INTERNAL_SERVER_ERROR);
}
}
public function clearCart()
{
try {
$items = Cart::where('user_id', auth()->id());
if($items->count() == 0){
return response()
->json([
'message' => "Empty cart.",
'errors' => ["error" => ["Nothing to delete. Cart already empty."]]
], Response::HTTP_NOT_FOUND);
}else{
$items->delete();
return response()
->json(['message' => 'Cart deleted successfully'], Response::HTTP_OK);
}
}catch (\Exception $e){
\Log::channel('db_errors')->info('Record Deletion Error : Cart');
\Log::channel('db_errors')->info($e->getMessage());
return response()
->json([
'message' => "Record not deleted.",
'errors' => ["error" => ["Unable to delete cart."]]
], Response::HTTP_INTERNAL_SERVER_ERROR);
}
}
public function clearBulkCart(Request $request)
{
$request->validate([
'ids' => 'required|array',
'ids.*' => 'exists:carts,id,user_id,'.auth()->id(),
],
[
'ids.*.exists' => 'Id #:position is invalid.',
]
);
try {
Cart::whereIn('id', $request->get('ids'))->delete();
return response()
->json(['message' => 'Cart items deleted successfully'], Response::HTTP_OK);
}catch (\Exception $e){
\Log::channel('db_errors')->info('Record Deletion Error : Cart items');
\Log::channel('db_errors')->info($e->getMessage());
return response()
->json([
'message' => "Record not deleted.",
'errors' => ["error" => ["Unable to delete cart items."]]
], Response::HTTP_INTERNAL_SERVER_ERROR);
}
}
}