paginate(12); return response()->json([ 'data' => ShopPackageResource::collection($packages), 'meta' => [ 'current_page' => $packages->currentPage(), 'last_page' => $packages->lastPage(), 'per_page' => $packages->perPage(), 'total' => $packages->total(), ], ]); } public function categories(): JsonResponse { return response()->json([ 'data' => ['furniture', 'badges', 'ranks'], ]); } public function purchase(Request $request, int $packageId): JsonResponse { $package = WebsiteShopArticle::findOrFail($packageId); $user = $request->user(); if ($package->give_rank && $user->rank >= $package->give_rank) { return response()->json(['error' => 'You already have this or a higher rank'], 400); } if ($user->credits < $package->costs) { return response()->json(['error' => 'Not enough credits'], 400); } $user->decrement('credits', $package->costs); return response()->json(['success' => true, 'message' => 'Purchase successful']); } }