syncUploadData method
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;
}
}