orderBy('id', 'asc')->paginate(config('app.pagination')); return ApiResponse::OK->response([ 'data' => $clients, ]); } public function search(Request $request) { $request->validate([ 'filter' => 'required|string|min:2', ]); $search = $request->input('filter'); $clients = Client::with('simCards:id,msisdn') ->where(function($q) use ($search) { $q->whereRaw("CONCAT(name, ' ', paternal, ' ', maternal) LIKE ?", ["%{$search}%"]) ->orWhere('rfc', 'like', "%{$search}%") ->orWhere('email', 'like', "%{$search}%") ->orWhere('phone', 'like', "%{$search}%"); }) ->orderBy('id', 'asc') ->paginate(config('app.pagination')); return ApiResponse::OK->response([ 'data' => $clients, ]); } public function show(Client $client) { $client->load('simCards:id,msisdn'); return ApiResponse::OK->response([ 'data' => $client, ]); } public function store(ClientStoreRequest $request) { $client = Client::create($request->validated()); return ApiResponse::CREATED->response([ 'data' => $client, ]); } public function update(ClientUpdateRequest $request, Client $client) { $client->update($request->validated()); return ApiResponse::OK->response([ 'data' => $client, ]); } public function destroy(Client $client) { $hasActiveSims = $client->simCards() ->wherePivot('is_active', true) ->exists(); if ($hasActiveSims) { return ApiResponse::BAD_REQUEST->response([ 'message' => 'No se puede eliminar el cliente porque tiene SIMs activas', ]); } $client->delete(); return ApiResponse::NO_CONTENT->response(); } }