/home2/mshostin/carnival.ms-hostingladz.com/app/Http/Controllers/AddToCartController.php
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Models\Product;
use App\Models\Cart;
use Illuminate\Support\Facades\Auth;
class AddToCartController extends Controller
{
public function addCart(Request $request)
{
$request->validate([
'product_id' => 'required|integer',
'quantity' => 'required|integer|min:1',
'type' => 'required|in:product,event,music,costume',
]);
if (!Auth::check()) {
return response()->json(['error' => 'User is not authenticated'], 401);
}
$user_id = Auth::id();
// Check if cart item exists for same product & type
$cartItem = Cart::where('user_id', $user_id)
->where('product_id', $request->product_id)
->where('type', $request->type)
->first();
if ($cartItem) {
$cartItem->update(['quantity' => $cartItem->quantity + $request->quantity]);
} else {
$cartItem = Cart::create([
'user_id' => $user_id,
'product_id' => $request->product_id,
'quantity' => $request->quantity,
'type' => $request->type,
]);
}
// Get all items again for updated cart
$cartItems = Cart::with(['product', 'event', 'event.tickets', 'music', 'costume'])
->where('user_id', $user_id)
->get()
->map(function ($item) {
return [
'id' => $item->id,
'quantity' => $item->quantity,
'details' => $item->item_details, // unified accessor
];
});
return response()->json($cartItems);
}
public function checkout()
{
$user_id = Auth::id();
$cartItem = Cart::where('user_id', $user_id)->get();
return view('ShopFrontend.Checkout', compact('cartItem'));
}
public function update(Request $request)
{
$request->validate([
'id' => 'required|integer|exists:carts,id',
'quantity' => 'required|integer|min:1',
]);
$cartItem = Cart::findOrFail($request->id);
$cartItem->quantity = $request->quantity;
$cartItem->save();
// reload cart with relations so frontend stays updated
$cartItems = Cart::with(['product', 'event', 'event.tickets', 'music', 'costume'])
->where('user_id', $cartItem->user_id)
->get()
->map(function ($item) {
return [
'id' => $item->id,
'quantity' => $item->quantity,
'details' => $item->item_details,
];
});
return response()->json([
'success' => true,
'cart' => $cartItems,
]);
}
public function remove($id)
{
$cartItem = Cart::findOrFail($id);
$cartItem->delete();
// reload updated cart for frontend
$cartItems = Cart::with(['product', 'event', 'event.tickets', 'music', 'costume'])
->where('user_id', auth()->id())
->get()
->map(function ($item) {
return [
'id' => $item->id,
'quantity' => $item->quantity,
'details' => $item->item_details,
];
});
return response()->json([
'success' => true,
'cart' => $cartItems,
]);
}
}