syncUploadData method

Future<void> syncUploadData()

Executa o upload de dados para o servidor

Implementation

Future<void> syncUploadData() async {
  try {
    // Obter todos os logs pendentes ordenados por data de criação
    final allPendingLogs = await _syncLogger.getPendingLogs();

    if (allPendingLogs.isEmpty) {
      SyncUtils.debugLog('Nenhum dado pendente para upload',
          tag: 'SyncUploadStrategy');
      return;
    }

    SyncUtils.debugLog(
        'Enviando ${allPendingLogs.length} itens pendentes para o servidor',
        tag: 'SyncUploadStrategy');

    // Separar arquivos dos dados
    final fileLogs =
        allPendingLogs.where((log) => log.isFileToUpload).toList();
    final dataLogs =
        allPendingLogs.where((log) => !log.isFileToUpload).toList();

    // Debug: verificar tipos de entidades nos logs de arquivo
    final mediaLogs =
        fileLogs.where((log) => log.entityType == 'MEDIA').toList();
    SyncUtils.debugLog('📁 Total de logs de arquivo: ${fileLogs.length}',
        tag: 'SyncUploadStrategy');
    SyncUtils.debugLog('🖼️ Logs de media encontrados: ${mediaLogs.length}',
        tag: 'SyncUploadStrategy');
    for (final mediaLog in mediaLogs) {
      SyncUtils.debugLog(
          '   - Media ID: ${mediaLog.entityId}, Operation: ${mediaLog.operation.value}',
          tag: 'SyncUploadStrategy');
    }

    // Ordenar dados por data de criação
    dataLogs.sort((a, b) => a.createdAt.compareTo(b.createdAt));

    SyncUtils.debugLog('Arquivos para upload: ${fileLogs.length}',
        tag: 'SyncUploadStrategy');
    SyncUtils.debugLog('Dados para upload: ${dataLogs.length}',
        tag: 'SyncUploadStrategy');

    // FASE 1: Processar arquivos em lotes
    if (fileLogs.isNotEmpty) {
      SyncUtils.debugLog('=== INICIANDO UPLOAD DE ARQUIVOS ===',
          tag: 'SyncUploadStrategy');
      await _processBatches(fileLogs, SyncBatchType.files);
      SyncUtils.debugLog('=== UPLOAD DE ARQUIVOS CONCLUÍDO ===',
          tag: 'SyncUploadStrategy');
    }

    // FASE 2: Processar dados em lotes (ordenados por data de criação)
    if (dataLogs.isNotEmpty) {
      SyncUtils.debugLog('=== INICIANDO UPLOAD DE DADOS ===',
          tag: 'SyncUploadStrategy');
      await _processBatches(dataLogs, SyncBatchType.data);
      SyncUtils.debugLog('=== UPLOAD DE DADOS CONCLUÍDO ===',
          tag: 'SyncUploadStrategy');
    }

    SyncUtils.debugLog('Todos os lotes foram processados com sucesso',
        tag: 'SyncUploadStrategy');
  } catch (e) {
    SyncUtils.debugLog('Erro geral no upload de dados: $e',
        tag: 'SyncUploadStrategy');
    rethrow;
  }
}