fetchAll('SELECT * FROM media_queue WHERE status = ? ORDER BY created_at ASC LIMIT 10', ['pending']); $ms = new MediaService(); foreach ($rows as $r) { try { $res = null; if (!empty($r['media_id'])) { $res = $ms->fetchAndStoreFromGraph($r['media_id'], $r['subdir'] ?? date('Y/m')); } elseif (!empty($r['media_url'])) { $res = $ms->fetchAndStoreFromUrl($r['media_url'], $r['subdir'] ?? date('Y/m')); } if ($res) { // Actualizar fila media_queue $db->update('media_queue', ['status' => 'done', 'result' => json_encode($res)], 'id = :id', ['id' => $r['id']]); // Actualizar conversations si tenemos conversation_id if (!empty($r['conversation_id'])) { $update = []; if (!empty($res['local_file'])) $update['local_file'] = $res['local_file']; if (!empty($res['local_thumb'])) $update['local_thumb'] = $res['local_thumb']; if (!empty($update)) { $db->update('conversations', $update, 'id = :id', ['id' => $r['conversation_id']]); } } } } catch (Exception $e) { $db->update('media_queue', ['status' => 'failed', 'result' => json_encode(['error' => $e->getMessage()])], 'id = :id', ['id' => $r['id']]); } } echo "Processed " . count($rows) . " jobs\n";