successResponse(payload: $this->service->getCounters()); } public function getNovoAssociadosPaginated(Request $request): JsonResponse { $filters = $request->only(['search']); $perPage = min((int) $request->get('per_page', 10), 100); $paginator = $this->service->getNovoAssociadosPaginated($filters, $perPage); return $this->successResponse(payload: [ 'data' => array_map( fn($u) => [ 'id' => $u->id, 'name' => $u->name, 'cpf' => $u->cpf, 'created_at' => $u->created_at?->format('d/m/Y'), ], $paginator->items() ), 'total' => $paginator->total(), 'from' => $paginator->firstItem() ?? 0, 'to' => $paginator->lastItem() ?? 0, ]); } public function getContatosAssociadosPaginated(Request $request): JsonResponse { $filters = $request->only(['search']); $perPage = min((int) $request->get('per_page', 10), 100); $paginator = $this->service->getContatosAssociadosPaginated($filters, $perPage); return $this->successResponse(payload: [ 'data' => array_map( fn($u) => [ 'id' => $u->id, 'name' => $u->name, 'phone' => $u->phone, 'email' => $u->email, ], $paginator->items() ), 'total' => $paginator->total(), 'from' => $paginator->firstItem() ?? 0, 'to' => $paginator->lastItem() ?? 0, ]); } public function getExclusoesMesPaginated(Request $request): JsonResponse { $filters = $request->only(['search']); $perPage = min((int) $request->get('per_page', 10), 100); $paginator = $this->service->getExclusoesMesPaginated($filters, $perPage); return $this->successResponse(payload: [ 'data' => array_map( fn($u) => [ 'id' => $u->id, 'name' => $u->name, 'cpf' => $u->cpf, 'excluded_at' => $u->excluded_at?->format('d/m/Y'), ], $paginator->items() ), 'total' => $paginator->total(), 'from' => $paginator->firstItem() ?? 0, 'to' => $paginator->lastItem() ?? 0, ]); } public function exportNovoAssociados(): BinaryFileResponse { $filename = 'novos_associados_' . now()->format('d-m-Y') . '.xlsx'; return Excel::download(new NovoAssociadosExport(), $filename); } public function exportContatosAssociados(): BinaryFileResponse { $filename = 'contatos_associados_' . now()->format('d-m-Y') . '.xlsx'; return Excel::download(new ContatosAssociadosExport(), $filename); } public function exportExclusoesMes(): BinaryFileResponse { $filename = 'exclusoes_mes_' . now()->format('d-m-Y') . '.xlsx'; return Excel::download(new ExclusoesMesExport(), $filename); } }