filled('serie') && !$request->filled('brand')) { return ApiResponse::BAD_REQUEST->response([ 'message' => 'Debe proporcionar al menos uno de los siguientes parámetros: serie o marca.' ]); } if ($request->filled('serie')) { $query->where('serie', 'LIKE', '%' . $request->input('serie') . '%'); } if ($request->filled('brand')) { $query->where('brand', 'LIKE', '%' . $request->input('brand') . '%'); } $query->with('deviceModules.module', 'deviceModules.user'); $perPage = $request->input('per_page', 15); $devices = $query->paginate($perPage); return ApiResponse::OK->response([ 'devices' => $devices->map(function ($device) { $module = $device->deviceModules->first()?->module; $authorizedUsers = $device->deviceModules ->filter(fn($dm) => $dm->user !== null) ->map(function ($deviceModule) { return [ 'id' => $deviceModule->user->id, 'name' => $deviceModule->user->full_name, 'email' => $deviceModule->user->email, ]; }) ->unique('id') ->values(); return [ 'id' => $device->id, 'brand' => $device->brand, 'serie' => $device->serie, 'mac_address' => $device->mac_address, 'status' => $device->status ? 'activo' : 'inactivo', 'module' => $module ? [ 'id' => $module->id, 'name' => $module->name, ] : null, 'authorized_users' => $authorizedUsers, ]; }), 'pagination' => [ 'total' => $devices->total(), 'per_page' => $devices->perPage(), 'current_page' => $devices->currentPage(), 'last_page' => $devices->lastPage(), 'from' => $devices->firstItem(), 'to' => $devices->lastItem(), ], ]); } catch (\Exception $e) { return ApiResponse::INTERNAL_ERROR->response([ 'message' => 'Error al obtener la lista de dispositivos.', 'error' => $e->getMessage(), ]); } } public function store(DeviceStoreRequest $request) { try { DB::beginTransaction(); // 1. Crear el dispositivo $device = Device::create([ 'brand' => $request->input('brand'), 'serie' => $request->input('serie'), 'mac_address' => $request->input('mac_address'), 'status' => $request->input('status', true), ]); // 2. Asignar módulo y usuarios usando el modelo DeviceModule $userIds = $request->input('user_id'); foreach ($userIds as $userId) { DeviceModule::create([ 'device_id' => $device->id, 'module_id' => $request->module_id, 'user_id' => $userId, 'status' => true, ]); } DB::commit(); $device->load('modules'); return ApiResponse::CREATED->response([ 'message' => 'Dispositivo creado exitosamente.', 'device' => [ 'id' => $device->id, 'brand' => $device->brand, 'serie' => $device->serie, 'status' => $device->status, ], ]); } catch (\Exception $e) { DB::rollBack(); return ApiResponse::INTERNAL_ERROR->response([ 'message' => 'Error al crear el dispositivo.', 'error' => $e->getMessage(), ]); } } }