get('per_page', 15), 500); $paginator = $this->customerRepository ->filter($request->all(), ['tags'], ['hosting', 'vps', 'domain'], ['*'], true) ->paginate($perPage); return $this->paginatedResponse($paginator); } public function store(CreateCustomerRequest $request): JsonResponse { $customer = $this->accountService->create($request->validated()); return response()->json([ 'error' => false, 'message' => 'Customer created successfully', 'data' => new CustomerResource($customer), ], 201); } public function show(string $uuid): JsonResponse { $customer = $this->resolveCustomer($uuid); $customer = $this->customerRepository->findWithRelationships( $customer->id, ['mail', 'file'], [ 'invoice' => [ 'invoices_status_count_1' => ['key' => 'status', 'condition' => '=', 'value' => 1], 'invoices_status_count_0' => ['key' => 'status', 'condition' => '=', 'value' => 0], ], 'hosting' => 'hosting_count', 'vps' => 'vps_count', 'domain' => 'domain_count', 'ticket' => 'ticket_count', ], [ 'invoice' => [ 'invoices_status_1' => ['key' => 'status', 'condition' => '=', 'value' => 1, 'sum' => 'total'], 'invoices_status_0' => ['key' => 'status', 'condition' => '=', 'value' => 0, 'sum' => 'total'], ], ], ); abort_if(!$customer, 404, "Can't find customer by UUID #{$uuid}"); $customer->refresh(); return response()->json(['error' => false, 'data' => new CustomerResource($customer)]); } public function update(string $uuid, CreateCustomerRequest $request): JsonResponse { $data = $request->validated(); if (!empty($request->password)) { $data['password_raw'] = $request->password; } $customer = $this->accountService->update($uuid, $data); return response()->json([ 'error' => false, 'message' => 'Customer updated successfully', 'data' => new CustomerResource($customer), ]); } public function destroy(string $uuid): JsonResponse { $this->accountService->destroy($uuid); return response()->json(['error' => false, 'message' => 'Customer deleted successfully']); } private function paginatedResponse(\Illuminate\Contracts\Pagination\LengthAwarePaginator $paginator): JsonResponse { return response()->json([ 'error' => false, 'data' => [ 'items' => CustomerResource::collection($paginator), 'total' => $paginator->total(), 'per_page' => $paginator->perPage(), 'current_page' => $paginator->currentPage(), 'last_page' => $paginator->lastPage(), ], ]); } }