Ver código fonte

tras pasar validaciones se guardan en tempfile los archivos, otro endpoint process-load-archives se encarga de moverlos de tempFiles a Files, hay un id hardcodeado y endpoints fuera de middleware para probar publicamente

EmilianoOrtiz 3 meses atrás
pai
commit
8af88af534

+ 2 - 1
sistema-mantenimiento-back/app/Http/Controllers/DocumentManagementController.php

@@ -429,7 +429,8 @@ class DocumentManagementController extends Controller{
         }
 
         $form = $request->all();
-        $idUser = $this->encryptionController->decrypt($form['id_user']);
+        //$idUser = $this->encryptionController->decrypt($form['id_user']);
+        $idUser = "0000000001";
         if(!$idUser){
             return $this->responseController->makeResponse(true, "El id del usuario que realizó la petición no fue encriptado correctamente", [], 400);
         }

+ 158 - 0
sistema-mantenimiento-back/app/Http/Controllers/ValidateLoadArchivesController.php

@@ -5,6 +5,7 @@ namespace App\Http\Controllers;
 use Illuminate\Http\Request;
 use Illuminate\Support\Facades\Validator;
 use Illuminate\Support\Facades\Log;
+use Illuminate\Support\Facades\DB;
 use PhpOffice\PhpSpreadsheet\IOFactory;
 use ZipArchive;
 
@@ -15,6 +16,8 @@ use ZipArchive;
 class ValidateLoadArchivesController extends Controller
 {
     private $responseController;
+    private $encryptionController;
+    private $documentManagementController;
     
     // Expected headers in row 7 of Excel file with their corresponding column letters
     private $expectedHeaders = [
@@ -39,6 +42,8 @@ class ValidateLoadArchivesController extends Controller
     public function __construct()
     {
         $this->responseController = new ResponseController();
+        $this->encryptionController = new EncryptionController();
+        $this->documentManagementController = new DocumentManagementController();
     }
         
     /**
@@ -52,6 +57,8 @@ class ValidateLoadArchivesController extends Controller
         // Validate request inputs
         Log::info('Paso 1: Validando tipos de archivo');
         $validator = Validator::make($request->all(), [
+            'id_user' => 'required|string',
+            'linea' => 'required|integer',
             'excel_file' => 'required|file|mimes:xlsx,xls',
             'zip_file' => 'required|file|mimes:zip'
         ]);
@@ -104,6 +111,18 @@ class ValidateLoadArchivesController extends Controller
             'extra_in_zip' => count($comparison['extra_in_zip'])
         ]);
         
+        // Upload temp files if validation is successful
+        if ($comparison['valid']) {
+            Log::info('Paso 6: Subiendo archivos temporales');
+            $tempFiles = $this->uploadTempFiles($request);
+            if ($tempFiles['error']) {
+                Log::error('Error subiendo archivos temporales: ' . $tempFiles['message']);
+                return $this->responseController->makeResponse(true, $tempFiles['message'], [], 400);
+            }
+            Log::info('✓ Archivos temporales subidos');
+            $comparison['temp_files'] = $tempFiles['files'];
+        }
+        
         Log::info('=== VALIDACIÓN COMPLETADA EXITOSAMENTE ===');
         return $this->responseController->makeResponse(false, 'Validación completada.', $comparison);
     }
@@ -270,4 +289,143 @@ class ValidateLoadArchivesController extends Controller
             'extra_in_zip' => array_values($extraInZip)
         ];
     }
+    
+    /**
+     * Uploads Excel and ZIP files as temporary files using DocumentManagementController
+     */
+    private function uploadTempFiles(Request $request)
+    {
+        try {
+            $tempFiles = [];
+            
+            // Upload Excel file
+            $excelRequest = new Request();
+            $excelRequest->files->set('file', $request->file('excel_file'));
+            $excelRequest->merge([
+                'id_user' => $request->input('id_user'),
+                'linea' => $request->input('linea')
+            ]);
+            
+            $excelResponse = $this->documentManagementController->uploadTempFile($excelRequest);
+            $excelData = json_decode($excelResponse->getContent());
+            
+            Log::info('Excel upload response:', ['data' => $excelData]);
+            
+            if ($excelData->error) {
+                $errorMsg = isset($excelData->message) ? $excelData->message : 'Error desconocido subiendo Excel';
+                return ['error' => true, 'message' => 'Error subiendo Excel: ' . $errorMsg];
+            }
+            
+            $tempFiles['excel'] = $excelData->response->idArchivo;
+            
+            // Upload ZIP file
+            $zipRequest = new Request();
+            $zipRequest->files->set('file', $request->file('zip_file'));
+            $zipRequest->merge([
+                'id_user' => $request->input('id_user'),
+                'linea' => $request->input('linea')
+            ]);
+            
+            $zipResponse = $this->documentManagementController->uploadTempFile($zipRequest);
+            $zipData = json_decode($zipResponse->getContent());
+            
+            Log::info('ZIP upload response:', ['data' => $zipData]);
+            
+            if ($zipData->error) {
+                $errorMsg = isset($zipData->message) ? $zipData->message : 'Error desconocido subiendo ZIP';
+                return ['error' => true, 'message' => 'Error subiendo ZIP: ' . $errorMsg];
+            }
+            
+            $tempFiles['zip'] = $zipData->response->idArchivo;
+            
+            return ['error' => false, 'files' => $tempFiles];
+            
+        } catch (\Exception $e) {
+            return ['error' => true, 'message' => 'Error en uploadTempFiles: ' . $e->getMessage()];
+        }
+    }
+    
+    /**
+     * Process endpoint that moves temp files to final storage
+     */
+    public function processLoadArchives(Request $request)
+    {
+        Log::info('=== INICIANDO PROCESAMIENTO DE ARCHIVOS ===');
+        
+        $validator = Validator::make($request->all(), [
+            'id_user' => 'required|string',
+            'linea' => 'required|integer',
+            'temp_files' => 'required|array',
+            'temp_files.excel' => 'required|string',
+            'temp_files.zip' => 'required|string'
+        ]);
+
+        if ($validator->fails()) {
+            return $this->responseController->makeResponse(
+                true,
+                'Se encontraron uno o más errores.',
+                $this->responseController->makeErrors($validator->errors()->messages()),
+                400
+            );
+        }
+        
+        $form = $request->all();
+        // $idUser = $this->encryptionController->decrypt($form['id_user']);
+        $idUser = "0000000001";
+        if (!$idUser) {
+            return $this->responseController->makeResponse(true, 'ID de usuario inválido.', [], 400);
+        }
+        
+        $finalFiles = [];
+        
+        try {
+            // Move Excel to final
+            Log::info('Moviendo Excel a almacenamiento final');
+            $excelFinal = $this->moveToFinal($form['temp_files']['excel'], $form['linea'], $idUser);
+            if (!$excelFinal) {
+                return $this->responseController->makeResponse(true, 'Error procesando Excel', [], 400);
+            }
+            $finalFiles['excel'] = $excelFinal;
+            
+            // Move ZIP to final
+            Log::info('Moviendo ZIP a almacenamiento final');
+            $zipFinal = $this->moveToFinal($form['temp_files']['zip'], $form['linea'], $idUser);
+            if (!$zipFinal) {
+                return $this->responseController->makeResponse(true, 'Error procesando ZIP', [], 400);
+            }
+            $finalFiles['zip'] = $zipFinal;
+            
+            Log::info('=== PROCESAMIENTO COMPLETADO EXITOSAMENTE ===');
+            return $this->responseController->makeResponse(false, 'Archivos procesados exitosamente.', $finalFiles);
+            
+        } catch (\Exception $e) {
+            Log::error('Error en procesamiento: ' . $e->getMessage());
+            return $this->responseController->makeResponse(true, 'Error interno: ' . $e->getMessage(), [], 500);
+        }
+    }
+    
+    /**
+     * Moves a temporary file to final storage using DocumentManagementController
+     */
+    private function moveToFinal($tempId, $line, $idUser)
+    {
+        try {
+            $tempIdDec = $this->encryptionController->decrypt($tempId);
+            if (!$tempIdDec) {
+                return false;
+            }
+            
+            $tempFile = DB::table('S002V01TARTE')->where('ARTE_IDAR', $tempIdDec)->first();
+            if (!$tempFile) {
+                return false;
+            }
+            
+            $result = $this->documentManagementController->moveFinalFile($line, 'GDEL', 'CA', $tempFile, $idUser);
+            return $result[0] ? $result[1] : false;
+            
+        } catch (\Exception $e) {
+            Log::error('Error en moveToFinal: ' . $e->getMessage());
+            return false;
+        }
+    }
 }

+ 2 - 1
sistema-mantenimiento-back/routes/api.php

@@ -553,5 +553,6 @@ Route::middleware(['jwt.auth'])->group(function(){
         
 });
 
-// Endpoint for file validation - outside middleware for public access
+// Endpoints for file validation and processing - outside middleware for public access
 Route::post("/validate-load-archives", "App\Http\Controllers\ValidateLoadArchivesController@validateFiles");
+Route::post("/process-load-archives", "App\Http\Controllers\ValidateLoadArchivesController@processLoadArchives");