From 41c85a8ade2e75158b5ce6c63ecd25ff696941b4 Mon Sep 17 00:00:00 2001 From: Juan Felipe Zapata Moreno Date: Wed, 29 Oct 2025 12:36:12 -0600 Subject: [PATCH] =?UTF-8?q?UPDATE:=20Se=20actualiz=C3=B3=20el=20m=C3=A9tod?= =?UTF-8?q?o=20de=20actualizar=20inscripci=C3=B3n?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- Docker/nginx/nginx.conf | 8 +- app/Http/Controllers/Admin/RoleController.php | 27 +- .../Repuve/InscriptionController.php | 2 +- .../Controllers/Repuve/ModuleController.php | 27 -- .../Controllers/Repuve/UpdateController.php | 269 +++++++++++------- .../Requests/Repuve/VehicleStoreRequest.php | 2 +- app/Models/File.php | 2 +- config/filesystems.php | 10 - docker-compose.yml | 8 +- dockerfile | 10 +- entrypoint-dev.sh | 6 +- public/records | 2 +- routes/api.php | 5 +- 13 files changed, 196 insertions(+), 182 deletions(-) diff --git a/Docker/nginx/nginx.conf b/Docker/nginx/nginx.conf index 221f9f9..5ade1b7 100644 --- a/Docker/nginx/nginx.conf +++ b/Docker/nginx/nginx.conf @@ -1,7 +1,7 @@ server { listen 80; server_name _; - root /var/www/repuve-v1/public; + root /var/www/repuve-backend-v1/public; index index.php index.html; # Logging @@ -45,17 +45,17 @@ server { # Handle storage files (Laravel storage link) location /storage { - alias /var/www/repuve-v1/storage/app; + alias /var/www/repuve-backend-v1/storage/app; try_files $uri =404; } location /profile { - alias /var/www/repuve-v1/storage/app/profile; + alias /var/www/repuve-backend-v1/storage/app/profile; try_files $uri =404; } location /images { - alias /var/www/repuve-v1/storage/app/images; + alias /var/www/repuve-backend-v1/storage/app/images; try_files $uri =404; } diff --git a/app/Http/Controllers/Admin/RoleController.php b/app/Http/Controllers/Admin/RoleController.php index ddfe86b..e8b4ad6 100644 --- a/app/Http/Controllers/Admin/RoleController.php +++ b/app/Http/Controllers/Admin/RoleController.php @@ -41,9 +41,13 @@ public function index() */ public function store(RoleStoreRequest $request) { - Role::create($request->all()); + $model = Role::create($request->all()); - return ApiResponse::OK->response(); + return ApiResponse::OK->response([ + 'message' => 'Rol creado exitosamente', + 'id' => $model->id, + 'name' => $model->name, + ]); } /** @@ -97,23 +101,4 @@ public function updatePermissions(Role $role, Request $request) return ApiResponse::OK->response(); } - - /** - * Obtener todos los roles - */ - public function listAll() - { - try { - $roles = Role::orderBy('name')->get(['id', 'name']); - - return ApiResponse::OK->response([ - 'roles' => $roles, - ]); - - } catch (\Exception $e) { - return ApiResponse::INTERNAL_ERROR->response([ - 'message' => 'Error al obtener roles', - ]); - } - } } diff --git a/app/Http/Controllers/Repuve/InscriptionController.php b/app/Http/Controllers/Repuve/InscriptionController.php index 1dd26f4..d75b03c 100644 --- a/app/Http/Controllers/Repuve/InscriptionController.php +++ b/app/Http/Controllers/Repuve/InscriptionController.php @@ -133,7 +133,7 @@ public function vehicleInscription(VehicleStoreRequest $request) $customName = str_replace(' ', '_', $customName); $extension = $file->getClientOriginalExtension(); $fileName = $customName . '_' . time() . '.' . $extension; - $path = $file->storeAs('/', $fileName, 'records'); + $path = $file->storeAs('records', $fileName, 'public'); $md5 = md5_file($file->getRealPath()); $fileRecord = File::create([ diff --git a/app/Http/Controllers/Repuve/ModuleController.php b/app/Http/Controllers/Repuve/ModuleController.php index b5a9075..25d183e 100644 --- a/app/Http/Controllers/Repuve/ModuleController.php +++ b/app/Http/Controllers/Repuve/ModuleController.php @@ -224,31 +224,4 @@ public function toggleStatus(int $id) ]); } } - - public function getAvailableUsers() - { - try { - $users = User::select('id', 'name', 'paternal', 'maternal', 'email') - ->orderBy('name') - ->get(); - - return ApiResponse::OK->response([ - 'users' => $users->map(function ($user) { - return [ - 'id' => $user->id, - 'name' => $user->full_name, - 'email' => $user->email, - ]; - }), - ]); - - } catch (\Exception $e) { - Log::error('Error al obtener usuarios: ' . $e->getMessage()); - - return ApiResponse::INTERNAL_ERROR->response([ - 'message' => 'Error al obtener lista de usuarios', - 'error' => $e->getMessage(), - ]); - } - } } diff --git a/app/Http/Controllers/Repuve/UpdateController.php b/app/Http/Controllers/Repuve/UpdateController.php index 370bfdd..91d9dbb 100644 --- a/app/Http/Controllers/Repuve/UpdateController.php +++ b/app/Http/Controllers/Repuve/UpdateController.php @@ -3,66 +3,198 @@ namespace App\Http\Controllers\Repuve; use App\Http\Controllers\Controller; +use Illuminate\Http\Request; use App\Http\Requests\Repuve\VehicleUpdateRequest; use Notsoweb\ApiResponse\Enums\ApiResponse; use Illuminate\Support\Facades\DB; -use Illuminate\Support\Facades\Auth; -use Illuminate\Support\Facades\Log; use App\Models\Record; use App\Models\File; use App\Models\Owner; use App\Models\Tag; use App\Models\Error; +use Exception; +use PhpParser\Node\Stmt\Foreach_; class UpdateController extends Controller { - public function vehicleUpdate(VehicleUpdateRequest $request) + public function vehicleData(Request $request) { try { - $recordId = $request->input('record_id'); + $request->validate([ + 'folio' => 'required', + 'string', + 'exists:records,folio', + 'tag_number' => 'required', + 'string', + 'exists:tags,tag_number', + 'vin' => 'required', + 'string', + 'exists:vehicles,vin' + ]); - // Buscar vehículo por folio y tag - $record = Record::with(['vehicle.owner', 'vehicle.tag', 'files', 'error'])->find($recordId); + $folio = $request->input('folio'); + $tagNumber = $request->input('tag_number'); + $vin = $request->input('vin'); + + $isStolen = $this->checkIfStolen($vin); + + if ($isStolen) { + return ApiResponse::FORBIDDEN->response([ + 'vin' => $vin, + 'stolen' => true, + 'message' => 'El vehículo reporta robo. No se puede continuar con la actualización.', + ]); + } + + $record = Record::with(['vehicle.owner', 'vehicle.tag', 'files', 'error']) + ->where('folio', $folio) + ->first(); - // Validar que el tag if (!$record) { return ApiResponse::BAD_REQUEST->response([ 'message' => 'No se encontró el expediente', - 'record_id' => $recordId, + 'folio' => $folio, ]); } $vehicle = $record->vehicle; $tag = $vehicle->tag; - if (!$tag) { - return ApiResponse::NOT_FOUND->response([ - 'message' => 'El vehículo no tiene tag asociado', - 'vehicle_id' => $vehicle->placa, + if (!$tag || $tag->tag_number !== $tagNumber) { + return ApiResponse::BAD_REQUEST->response([ + 'message' => 'El tag_number no coincide con el registrado en el expediente', ]); } - // Consultar API Repuve Nacional (verificar robo) - $isStolen = $this->checkIfStolen($record->folio); + if ($vehicle->numero_serie !== $vin) { + return ApiResponse::BAD_REQUEST->response([ + 'message' => 'El VIN no coincide con el registrado en el expediente', + ]); + } + + $owner = $vehicle->owner; + + + return ApiResponse::OK->response([ + 'message' => 'Datos del vehículo obtenidos exitosamente', + 'record' => [ + 'id' => $record->id, + 'folio' => $record->folio, + 'created_at' => $record->created_at->toDateTimeString(), + 'updated_at' => $record->updated_at->toDateTimeString(), + ], + 'vehicle' => [ + 'id' => $vehicle->id, + 'placa' => $vehicle->placa, + 'anio_placa' => $vehicle->anio_placa, + 'numero_serie' => $vehicle->numero_serie, + 'vigencia' => $vehicle->vigencia, + 'fecha_impresion' => $vehicle->fecha_impresion, + 'qr_hash' => $vehicle->qr_hash, + 'valido' => $vehicle->valido, + 'nombre' => $vehicle->nombre, + 'nombre2' => $vehicle->nombre2, + 'marca' => $vehicle->marca, + 'linea' => $vehicle->linea, + 'sublinea' => $vehicle->sublinea, + 'modelo' => $vehicle->modelo, + 'color' => $vehicle->color, + 'tipo' => $vehicle->tipo, + 'tipo_servicio' => $vehicle->tipo_servicio, + 'numero_motor' => $vehicle->numero_motor, + 'descripcion_origen' => $vehicle->descripcion_origen, + 'municipio' => $vehicle->municipio, + 'localidad' => $vehicle->localidad, + 'calle' => $vehicle->calle, + 'calle2' => $vehicle->calle2, + 'codigo_postal' => $vehicle->codigo_postal, + 'serie_folio' => $vehicle->serie_folio, + 'nrpv' => $vehicle->nrpv, + ], + 'owner' => [ + 'id' => $owner->id, + 'name' => $owner->name, + 'paternal' => $owner->paternal, + 'maternal' => $owner->maternal, + 'full_name' => $owner->full_name, + 'rfc' => $owner->rfc, + 'curp' => $owner->curp, + 'address' => $owner->address, + ], + 'tag' => [ + 'id' => $tag->id, + 'folio' => $tag->folio, + 'tag_number' => $tag->tag_number, + 'status' => $tag->status, + 'package_id' => $tag->package_id, + ], + 'existing_files' => $record->files->map(function ($file) { + return [ + 'id' => $file->id, + 'name' => $file->name, + 'path' => $file->path, + 'url' => $file->url, + 'created_at' => $file->created_at->toDateTimeString(), + ]; + }), + 'total_files' => $record->files->count(), + ]); + } catch (Exception $e) { + return ApiResponse::BAD_REQUEST->response([ + 'message' => 'Error de validación', + 'error' => $e->getMessage(), + ]); + } + } + + public function vehicleUpdate(VehicleUpdateRequest $request) + { + try { + $folio = $request->input('folio'); + $tagNumber = $request->input('tag_number'); + $vin = $request->input('vin'); + + $isStolen = $this->checkIfStolen($vin); if ($isStolen) { return ApiResponse::FORBIDDEN->response([ - 'record_id' => $recordId, - 'tag_number' => $tag->tag_number, + 'vin' => $vin, 'stolen' => true, 'message' => 'El vehículo reporta robo. No se puede continuar con la actualización.', ]); } - // Iniciar transacción + $record = Record::with(['vehicle.owner', 'vehicle.tag', 'files', 'error']) + ->where('folio', $folio) + ->first(); + + if (!$record) { + return ApiResponse::NOT_FOUND->response([ + 'message' => 'No se encontró el expediente', + 'folio' => $folio, + ]); + } + + $vehicle = $record->vehicle; + $tag = $vehicle->tag; + + if (!$tag || $tag->tag_number !== $tagNumber) { + return ApiResponse::BAD_REQUEST->response([ + 'message' => 'El tag_number no coincide con el registrado en el expediente', + ]); + } + + if ($vehicle->numero_serie !== $vin) { + return ApiResponse::BAD_REQUEST->response([ + 'message' => 'El VIN no coincide con el registrado en el expediente', + ]); + } + DB::beginTransaction(); - // Obtener datos del vehículo de API Estatal - $vehicleData = $this->getVehicle2(); $ownerData = $this->getOwner(); - // Actualizar propietario $owner = Owner::updateOrCreate( ['rfc' => $ownerData['rfc']], [ @@ -74,89 +206,53 @@ public function vehicleUpdate(VehicleUpdateRequest $request) ] ); - // Actualizar vehículo - $vehicle->update([ - 'anio_placa' => $vehicleData['ANIO_PLACA'], - // NO actualizar 'placa' - es UNIQUE - // NO actualizar 'numero_serie' - es UNIQUE (NIV/VIN) - 'rfc' => $vehicleData['RFC'], - // NO actualizar 'folio' => $folio, - 'vigencia' => $vehicleData['VIGENCIA'], - 'fecha_impresion' => $vehicleData['FECHA_IMPRESION'], - 'qr_hash' => $vehicleData['QR_HASH'], - 'valido' => $vehicleData['VALIDO'], - 'nombre' => $vehicleData['NOMBRE'], - 'nombre2' => $vehicleData['NOMBRE2'], - 'municipio' => $vehicleData['MUNICIPIO'], - 'localidad' => $vehicleData['LOCALIDAD'], - 'calle' => $vehicleData['CALLE'], - 'calle2' => $vehicleData['CALLE2'], - 'tipo' => $vehicleData['TIPO'], - 'tipo_servicio' => $vehicleData['TIPO_SERVICIO'], - 'marca' => $vehicleData['MARCA'], - 'linea' => $vehicleData['LINEA'], - 'sublinea' => $vehicleData['SUBLINEA'], - 'modelo' => $vehicleData['MODELO'], - 'numero_motor' => $vehicleData['NUMERO_MOTOR'], - 'descripcion_origen' => $vehicleData['DESCRIPCION_ORIGEN'], - 'color' => $vehicleData['COLOR'], - 'codigo_postal' => $vehicleData['CODIGO_POSTAL'], - // NO actualizar 'serie_folio' - es UNIQUE - // NO actualizar 'sfolio' - es UNIQUE - // NO actualizar 'nrpv' - es UNIQUE (mantener el original) - 'owner_id' => $owner->id, - ]); - - // Procesar archivos si existen - $uploadedFiles = []; + $uploadedFiles = []; if ($request->hasFile('files')) { $files = $request->file('files'); $fileNames = $request->input('names', []); - foreach ($files as $index => $file) { - $customName = $fileNames[$index] ?? "archivo_" . ($index + 1); + foreach ($files as $indx => $file) { + $customName = $fileNames[$indx] ?? "archivo_" . ($indx + 1); $customName = str_replace(' ', '_', $customName); $extension = $file->getClientOriginalExtension(); $fileName = $customName . '_' . time() . '.' . $extension; - $path = $file->storeAs('/', $fileName, 'records'); + $path = $file->storeAs('records' . $fileName, 'public'); $md5 = md5_file($file->getRealPath()); $fileRecord = File::create([ - 'name' => $customName, - 'path' => $path, - 'md5' => $md5, 'record_id' => $record->id, + 'name' => $fileName, + 'path' => $path, + 'url' => asset('storage/' . $path), + 'md5' => $md5, ]); $uploadedFiles[] = [ 'id' => $fileRecord->id, 'name' => $fileRecord->name, 'path' => $fileRecord->path, - 'url' => $fileRecord->url, + 'md5' => $fileRecord->md5, ]; } } - // Enviar datos a API Repuve Nacional - $apiResponse = $this->sendToRepuveNacional($vehicle->numero_serie); + //Envio de datos + $apiResponse = $this->sendToRepuveNacional($vin); $apiResponse["repuve_response"]["folio_ci"] = $record->folio; $apiResponse["repuve_response"]["identificador_ci"] = $tag->tag_number; - // Procesar respuesta de la API if (isset($apiResponse['has_error']) && $apiResponse['has_error']) { - // Si hay error, busca bd $error = Error::where('code', $apiResponse['error_code'])->first(); if (!$error) { DB::rollBack(); - return ApiResponse::BAD_REQUEST->response([ + return ApiResponse::INTERNAL_ERROR->response([ 'message' => 'Código de error no encontrado en el catálogo', 'error_code' => $apiResponse['error_code'], 'error_message' => $apiResponse['error_message'], ]); } - // guarda error $record->update([ 'error_id' => $error->id, 'api_response' => $apiResponse, @@ -165,12 +261,10 @@ public function vehicleUpdate(VehicleUpdateRequest $request) DB::commit(); - // Retornar datos por error para que el usuario corrija - // Al volver a llamar esta función con datos corregidos, se repetirá el ciclo - return ApiResponse::OK->response([ - 'message' => 'Datos guardados con error. Corrija los datos y vuelva a enviar.', + return ApiResponse::NOT_ACCEPTABLE->response([ + 'message' => 'Datos guardados con error. Corrija y vuelva a enviar.', 'has_error' => true, - 'can_update' => true, + 'can_retry' => true, 'error' => [ 'code' => $error->code, 'description' => $error->description, @@ -180,22 +274,9 @@ public function vehicleUpdate(VehicleUpdateRequest $request) 'id' => $record->id, 'folio' => $record->folio, ], - 'vehicle' => $vehicleData, - 'owner' => $ownerData, - 'new_files' => $uploadedFiles, - 'total_new_files' => count($uploadedFiles), - 'existing_files' => $record->files->map(function ($file) { - return [ - 'id' => $file->id, - 'name' => $file->name, - 'path' => $file->path, - 'url' => $file->url, - ]; - }), ]); } - // Si NO hay error, guarda registro OK y quita errores previos $record->update([ 'error_id' => null, 'api_response' => $apiResponse, @@ -210,8 +291,6 @@ public function vehicleUpdate(VehicleUpdateRequest $request) 'record' => [ 'id' => $record->id, 'folio' => $record->folio, - 'vehicle_id' => $vehicle->id, - 'user_id' => $record->user_id, 'updated_at' => $record->updated_at->toDateTimeString(), ], 'vehicle' => [ @@ -229,24 +308,14 @@ public function vehicleUpdate(VehicleUpdateRequest $request) ], 'tag' => [ 'id' => $tag->id, - 'folio' => $tag->folio, 'tag_number' => $tag->tag_number, 'status' => $tag->status, ], 'new_files' => $uploadedFiles, - 'total_new_files' => count($uploadedFiles), - 'existing_files' => $record->files->map(function ($file) { - return [ - 'id' => $file->id, - 'name' => $file->name, - 'url' => $file->url, - ]; - }), 'total_files' => $record->files->count() + count($uploadedFiles), ]); - } catch (\Exception $e) { - DB::rollBack(); - return ApiResponse::BAD_REQUEST->response([ + } catch (Exception $e) { + return ApiResponse::INTERNAL_ERROR->response([ 'message' => 'Error al actualizar el vehículo', 'error' => $e->getMessage(), ]); diff --git a/app/Http/Requests/Repuve/VehicleStoreRequest.php b/app/Http/Requests/Repuve/VehicleStoreRequest.php index 90246f7..b29de7a 100644 --- a/app/Http/Requests/Repuve/VehicleStoreRequest.php +++ b/app/Http/Requests/Repuve/VehicleStoreRequest.php @@ -17,7 +17,7 @@ public function rules(): array 'tag_number' => ['required', 'string', 'exists:tags,tag_number'], 'vin' => ['required', 'string', 'max:30'], 'files' => ['nullable', 'array', 'min:1'], - 'files.*' => ['file', 'mimes:jpeg,png,jpg,pdf', 'max:10240'], + 'files.*' => ['file', 'mimes:jpeg,png,jpg', 'max:10240'], 'names' => ['nullable', 'array'], 'names.*' => ['string', 'max:255'], ]; diff --git a/app/Models/File.php b/app/Models/File.php index df4a52d..62f7adb 100644 --- a/app/Models/File.php +++ b/app/Models/File.php @@ -31,7 +31,7 @@ public function record() public function url(): Attribute { return Attribute::make( - get: fn () => Storage::disk('records')->url($this->path), + get: fn () => Storage::disk('public')->url($this->path), ); } } diff --git a/config/filesystems.php b/config/filesystems.php index 6bba8bb..b107cf5 100644 --- a/config/filesystems.php +++ b/config/filesystems.php @@ -52,15 +52,6 @@ 'visibility' => 'public', 'throw' => false, ], - - 'records' => [ - 'driver' => 'local', - 'root' => storage_path('app/records'), - 'url' => env('APP_URL').'/records', - 'visibility' => 'public', - 'throw' => false, - ], - 'images' => [ 'driver' => 'local', 'root' => storage_path('app/images'), @@ -97,6 +88,5 @@ public_path('storage') => storage_path('app/public'), public_path('profile') => storage_path('app/profile'), public_path('images') => storage_path('app/images'), - public_path('records') => storage_path('app/records'), ], ]; diff --git a/docker-compose.yml b/docker-compose.yml index 1c92cc5..eac721b 100644 --- a/docker-compose.yml +++ b/docker-compose.yml @@ -3,7 +3,7 @@ services: build: context: . dockerfile: dockerfile - working_dir: /var/www/repuve-v1 + working_dir: /var/www/repuve-backend-v1 environment: - DB_HOST=mysql - DB_USERNAME=${DB_USERNAME} @@ -11,8 +11,8 @@ services: - DB_DATABASE=${DB_DATABASE} - DB_PORT=${DB_PORT} volumes: - - ./:/var/www/repuve-v1 - - /var/www/repuve-v1/vendor + - ./:/var/www/repuve-backend-v1 + - /var/www/repuve-backend-v1/vendor networks: - repuve-network mem_limit: 400m @@ -25,7 +25,7 @@ services: ports: - "${NGINX_PORT}:80" volumes: - - ./public:/var/www/repuve-v1/public + - ./public:/var/www/repuve-backend-v1/public - ./Docker/nginx/nginx.conf:/etc/nginx/conf.d/default.conf networks: - repuve-network diff --git a/dockerfile b/dockerfile index 19f3103..a16da98 100644 --- a/dockerfile +++ b/dockerfile @@ -1,8 +1,8 @@ FROM php:8.3-fpm -RUN mkdir -p /var/www/repuve-v1 +RUN mkdir -p /var/www/repuve-backend-v1 -WORKDIR /var/www/repuve-v1 +WORKDIR /var/www/repuve-backend-v1 RUN apt-get update && apt-get install -y\ git \ @@ -29,15 +29,15 @@ RUN composer install --optimize-autoloader --no-interaction --no-scripts COPY . . -RUN chown -R www-data:www-data /var/www/repuve-v1 +RUN chown -R www-data:www-data /var/www/repuve-backend-v1 COPY entrypoint-dev.sh /usr/local/bin/entrypoint-dev.sh RUN chmod +x /usr/local/bin/entrypoint-dev.sh RUN mkdir -p storage/app/keys storage/logs bootstrap/cache -RUN chown -R www-data:www-data /var/www/repuve-v1/storage /var/www/repuve-v1/bootstrap/cache -RUN chmod -R 775 /var/www/repuve-v1/storage /var/www/repuve-v1/bootstrap/cache +RUN chown -R www-data:www-data /var/www/repuve-backend-v1/storage /var/www/repuve-backend-v1/bootstrap/cache +RUN chmod -R 775 /var/www/repuve-backend-v1/storage /var/www/repuve-backend-v1/bootstrap/cache EXPOSE 9000 diff --git a/entrypoint-dev.sh b/entrypoint-dev.sh index c85f1d0..c37f9ef 100644 --- a/entrypoint-dev.sh +++ b/entrypoint-dev.sh @@ -1,12 +1,12 @@ #!/bin/bash set -e -git config --global --add safe.directory /var/www/repuve-v1 +git config --global --add safe.directory /var/www/repuve-backend-v1 echo "=== Iniciando entrypoint DESARROLLO ===" -chown -R www-data:www-data /var/www/repuve-v1/storage /var/www/repuve-v1/bootstrap/cache -chmod -R 775 /var/www/repuve-v1/storage /var/www/repuve-v1/bootstrap/cache +chown -R www-data:www-data /var/www/repuve-backend-v1/storage /var/www/repuve-backend-v1/bootstrap/cache +chmod -R 775 /var/www/repuve-backend-v1/storage /var/www/repuve-backend-v1/bootstrap/cache # Variables desde Docker environment DB_HOST=${DB_HOST:-mysql} diff --git a/public/records b/public/records index 95b0c5a..f0a9799 120000 --- a/public/records +++ b/public/records @@ -1 +1 @@ -/var/www/repuve-v1/storage/app/records \ No newline at end of file +/var/www/repuve-backend-v1/storage/app/records \ No newline at end of file diff --git a/routes/api.php b/routes/api.php index 0a8311c..a9be703 100644 --- a/routes/api.php +++ b/routes/api.php @@ -37,6 +37,7 @@ Route::get('expediente/{id}/pdfImagenes', [RecordController::class, 'generatePdfImages']); //Rutas de Actualización + Route::get('consulta', [UpdateController::class, 'vehicleData']); Route::post('actualizar', [UpdateController::class, 'vehicleUpdate']); // Rutas de cancelación de constancias @@ -47,10 +48,6 @@ Route::post('/moduleCreate', [ModuleController::class, 'store']); Route::put('/moduleUpdate/{id}', [ModuleController::class, 'update']); Route::patch('/moduleStatus/{id}', [ModuleController::class, 'toggleStatus']); - Route::get('/moduleUsers', [ModuleController::class, 'getAvailableUsers']); - - // Rutas de roles, mostrar roles para asignar a usuarios - Route::get('/admin/roles-all', [RoleController::class, 'listAll']); //Rutas de dispositivos Route::get('/devices', [DeviceController::class, 'index']);