user(); $data = $request->validated(); // Convert UUID to ID for internal processing $product = \App\Models\Product::where('uuid', $data['product_id'])->first(); if (!$product) { // Should not happen if validation passes, but safety first (e.g. race condition or soft delete mismatch) throw new \Exception('Sản phẩm không tìm thấy hoặc đã bị xóa.'); } $data['product_id'] = $product->id; $customer = $request->user(); if (!$customer) { return response()->json([ 'success' => false, 'message' => 'Người dùng chưa đăng nhập hoặc phiên đăng nhập hết hạn.' ], 401); } $result = $this->orderService->create($data, $customer); return response()->json([ 'success' => true, 'data' => $result, 'message' => 'Tạo đơn hàng thành công' ], 201); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => $e->getMessage() ], 400); } } public function payOrder(int $id, PayOrderRequest $request): JsonResponse { try { $order = $this->orderRepo->find($id); if (!$order) { return response()->json(['message' => 'Đơn hàng không tồn tại'], 404); } if ($order->customer_id !== $request->user()->id) { return response()->json(['message' => 'Không có quyền truy cập'], 403); } $this->orderService->pay($order, $request->payment_method); return response()->json([ 'success' => true, 'message' => 'Thanh toán thành công' ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => $e->getMessage() ], 400); } } public function getList(Request $request): JsonResponse { try { $customer = $request->user(); $filters = [ 'total_price' => $request->query('total_price'), 'pending' => $request->query('pending') ]; $orders = $this->orderRepo->getOrders($customer->id, $filters); return response()->json([ 'success' => true, 'data' => $orders ]); } catch (\Exception $e) { return response()->json([ 'success' => false, 'message' => $e->getMessage() ], 400); } } }