Proyectos de Subversion LeadersLinked - Services

Rev

Rev 539 | Rev 541 | Ir a la última revisión | Mostrar el archivo completo | | | Autoría | Ultima modificación | Ver Log |

Rev 539 Rev 540
Línea 300... Línea 300...
300
 
300
 
301
        // 🔹 Intentar decodificar respuesta JSON (por si OpenAI responde directamente con JSON)
301
        // 🔹 Intentar decodificar respuesta JSON (por si OpenAI responde directamente con JSON)
Línea 302... Línea 302...
302
        $decoded = json_decode($reply, true);
302
        $decoded = json_decode($reply, true);
303
 
303
 
304
        if (json_last_error() === JSON_ERROR_NONE && is_array($decoded)) {
304
        if (json_last_error() === JSON_ERROR_NONE && is_array($decoded)) {
305
            return $decoded;
305
            //return $decoded;
Línea 306... Línea 306...
306
            //return $this->insertOrUpdateCompetenciesFromAIResponse($jobDescriptionId, $decoded['list_competencies']);
306
            return $this->insertOrUpdateCompetenciesFromAIResponse($jobDescriptionId, $decoded);
307
        }
307
        }
308
 
308
 
Línea 332... Línea 332...
332
                'message' => 'ID de descripción inválido',
332
                'message' => 'ID de descripción inválido',
333
                'data' => []
333
                'data' => []
334
            ];
334
            ];
335
        }
335
        }
Línea -... Línea 336...
-
 
336
 
-
 
337
        // 🔹 Validar que $aiCompetencies sea un array no vacío y de objetos/datos
-
 
338
        if (empty($aiCompetencies) || !is_array($aiCompetencies) || count($aiCompetencies) === 0) {
-
 
339
            return [
-
 
340
                'success' => false,
-
 
341
                'message' => 'No se proporcionaron competencias para procesar.',
-
 
342
                'data' => []
-
 
343
            ];
-
 
344
        }
336
 
345
 
337
        $adapter = $this->adapter;
346
        $adapter = $this->adapter;
338
        $sql = new Sql($adapter);
347
        $sql = new Sql($adapter);
Línea 339... Línea 348...
339
        $results = [];
348
        $results = [];
-
 
349
 
-
 
350
        foreach ($aiCompetencies as $comp) {
-
 
351
            // 🔹 Validar que cada elemento sea un array
-
 
352
            if (!is_array($comp)) {
-
 
353
                continue; // Ignoramos elementos inválidos
340
 
354
            }
341
        foreach ($aiCompetencies as $comp) {
355
 
342
            // 🔹 Preparar datos
356
            // 🔹 Preparar datos
343
            $name = trim($comp['name'] ?? '');
357
            $name = trim($comp['name'] ?? '');
344
            $description = trim($comp['description'] ?? '');
358
            $description = trim($comp['description'] ?? '');
Línea 345... Línea 359...
345
            $hasIdRaw = str_replace("'", '"', $comp['has_id'] ?? '{"bool": false, "nro": 0}');
359
            $hasIdRaw = str_replace("'", '"', $comp['has_id'] ?? '{"bool": false, "nro": 0}');
346
            $hasIdData = json_decode($hasIdRaw, true);
360
            $hasIdData = json_decode($hasIdRaw, true);
347
 
361
 
Línea 348... Línea 362...
348
            if (!$name || !$description || !is_array($hasIdData)) {
362
            if (!$name || !$description || !is_array($hasIdData)) {
349
                continue; // Datos incompletos, lo ignoramos
363
                continue; // Datos incompletos o corruptos, ignoramos
Línea 393... Línea 407...
393
                        'message' => "ID de competencia {$competencyId} no encontrado",
407
                        'message' => "ID de competencia {$competencyId} no encontrado",
394
                        'data' => []
408
                        'data' => []
395
                    ];
409
                    ];
396
                }
410
                }
Línea 397... Línea 411...
397
 
411
 
398
                // Solo actualizamos si realmente cambia el nombre o la descripción
412
                // Solo actualizar si cambia el nombre o la descripción
399
                if ($existing['name'] !== $name || $existing['description'] !== $description) {
413
                if ($existing['name'] !== $name || $existing['description'] !== $description) {
400
                    $update = $sql->update(CompetencyMapper::_TABLE)
414
                    $update = $sql->update(CompetencyMapper::_TABLE)
401
                        ->set([
415
                        ->set([
402
                            'name' => $name,
416
                            'name' => $name,
Línea 416... Línea 430...
416
                }
430
                }
Línea 417... Línea 431...
417
 
431
 
418
                $status = 'updated';
432
                $status = 'updated';
Línea 419... Línea 433...
419
            }
433
            }
420
 
434
 
421
            // 🔹 Vincular competencia con job description si no está vinculada
435
            // 🔹 Vincular competencia con job description
422
            $linkCheck = $sql->select(JobDescriptionCompetencyMapper::_TABLE)
436
            $linkCheck = $sql->select(JobDescriptionCompetencyMapper::_TABLE)
423
                ->where([
437
                ->where([
424
                    'job_description_id' => $jobDescriptionId,
438
                    'job_description_id' => $jobDescriptionId,
Línea 456... Línea 470...
456
            'message' => 'Procesamiento completado exitosamente.',
470
            'message' => 'Procesamiento completado exitosamente.',
457
            'data' => $results
471
            'data' => $results
458
        ];
472
        ];
459
    }
473
    }
Línea -... Línea 474...
-
 
474
 
460
 
475
 
461
    function callExternalApi($url, $payload, $headers)
476
    function callExternalApi($url, $payload, $headers)
462
    {
477
    {
463
        $ch = curl_init($url);
478
        $ch = curl_init($url);
464
        curl_setopt($ch, CURLOPT_CAINFO, '/etc/apache2/ssl/cacert.pem');
479
        curl_setopt($ch, CURLOPT_CAINFO, '/etc/apache2/ssl/cacert.pem');