with(['items.variant.product', 'items.variant.definitions.productAttribute.attribute']) ->where('tenant_codigo', $tenant->codigo) ->where('user_id', $request->user()->id) ->latest() ->paginateFromRequest() )->response(); } public function store(StorePurchaseRequest $request, Tenant $tenant, CheckoutService $checkoutService): JsonResponse { $data = $request->validated(); $integrationCode = $data['integration_code']; $paymentData = $data['payment_data']; unset($data['integration_code'], $data['payment_data']); $purchase = $checkoutService->processCheckout( $tenant, $request->user()->id, $data, $integrationCode, $paymentData ); return PurchaseResource::make($purchase)->response()->setStatusCode(201); } public function show(Request $request, Tenant $tenant, Purchase $compra): PurchaseResource { $compra = $this->resolveScopedPurchase($tenant, $request->user()->id, $compra); return PurchaseResource::make( $compra->loadMissing(['items.variant.product', 'items.variant.definitions.productAttribute.attribute']) ); } protected function resolveScopedPurchase(Tenant $tenant, int $userId, Purchase $purchase): Purchase { if ($purchase->tenant_codigo !== $tenant->codigo || $purchase->user_id !== $userId) { throw new NotFoundHttpException('Purchase not found for tenant.'); } return $purchase; } }