get('per_page', 15), 100); $data = $this->orderRepository->filter( $request->all(), ['payment', 'customer', 'invoice'], [], ['*'], true )->paginate($perPage); return response()->json([ 'error' => false, 'data' => [ 'items' => OrderResource::collection($data->items())->resolve(), 'total' => $data->total(), 'per_page' => $data->perPage(), ], ]); } public function domainPricing(): JsonResponse { return response()->json([ 'error' => false, 'data' => DomainPricing::toResponseArray(), ]); } public function store(OrderRequest $request): JsonResponse { try { $order = $this->orderService->createOrder($request->validated()); return response()->json([ 'error' => false, 'message' => 'Order created successfully', 'data' => new OrderResource($order), ], 201); } catch (\InvalidArgumentException $e) { return response()->json(['error' => true, 'message' => $e->getMessage()], 422); } catch (\Exception $e) { return response()->json(['error' => true, 'message' => $e->getMessage()], 500); } } public function show(string $order_num): JsonResponse { $order = $this->orderRepository->findByOrderNum($order_num); abort_if(!$order, 404, "Can't find order by ID #{$order_num}"); return response()->json([ 'error' => false, 'data' => new OrderResource($order), ]); } public function update(int $id, UpdateOrderRequest $request): JsonResponse { $order = $this->orderRepository->findWithRelationships($id, ['invoice', 'orderItem']); abort_if(!$order, 404, "Can't find order by ID #{$id}"); match ($request->action) { 'accept' => $this->orderService->confirmOrder($order, (bool) $request->module), 'cancel' => $this->orderService->setStatus($order, 2), default => $this->orderService->setStatus($order, 0), }; return response()->json(['error' => false, 'message' => 'Order updated successfully']); } public function destroy(int $id): JsonResponse { $order = Order::with('invoice', 'invoice.invoiceItems')->find($id); abort_if(!$order, 404, "Can't find order by ID #{$id}"); $this->orderService->deleteOrder($order); return response()->json(['error' => false, 'message' => 'Order deleted successfully']); } public function accept(int $id): JsonResponse { $order = $this->orderRepository->find($id); abort_if(!$order, 404, "Can't find order by ID #{$id}"); $this->orderService->setStatus($order, 1); return response()->json(['error' => false, 'message' => 'Order accepted successfully']); } public function cancel(int $id): JsonResponse { $order = $this->orderRepository->find($id); abort_if(!$order, 404, "Can't find order by ID #{$id}"); $this->orderService->setStatus($order, 2); return response()->json(['error' => false, 'message' => 'Order cancelled successfully']); } public function uploadProof(Request $request): JsonResponse { $request->validate(['file' => 'required|image|max:5120']); $path = $request->file('file')->store('payment-proofs', 'public'); return response()->json([ 'error' => false, 'url' => Storage::disk('public')->url($path), 'path' => $path, ]); } }