<?php namespace App\Http\Controllers; use App\Models\{Cart, CartItem, Product}; use Illuminate\Http\Request; class CartController extends Controller { private function userCart(): Cart { return Cart::firstOrCreate(['user_id' => auth()->id()]); } public function index() { $cart = $this->userCart()->load('items.product'); $subtotalCents = $cart->items->sum(fn($i) => $i->quantity * $i->unit_price_cents); return view('cart.index', compact('cart', 'subtotalCents')); } public function add(Request $request, Product $product) { $cart = $this->userCart(); $qty = max(1, (int) $request->input('quantity', 1)); $item = CartItem::firstOrNew([ 'cart_id' => $cart->id, 'product_id' => $product->id, ]); $item->unit_price_cents = $product->price_cents; $item->quantity = ($item->exists ? $item->quantity : 0) + $qty; $item->save(); return redirect()->route('cart.index')->with('success', 'Added to cart.'); } public function update(Request $request, Product $product) { $cart = $this->userCart(); $qty = max(1, (int) $request->input('quantity', 1)); CartItem::where('cart_id', $cart->id) ->where('product_id', $product->id) ->update(['quantity' => $qty]); return back()->with('success', 'Cart updated.'); } public function remove(Product $product) { $cart = $this->userCart(); CartItem::where('cart_id', $cart->id) ->where('product_id', $product->id) ->delete(); return back()->with('success', 'Item removed.'); } }