fix: prever 401 Unauthorized do Supabase no cache offline verificando a sessao

This commit is contained in:
2026-02-20 07:46:55 -03:00
parent b7415f0586
commit c9a628abe8

View File

@@ -48,7 +48,7 @@ export const useOffline = () => {
setIsSyncing(true); setIsSyncing(true);
try { try {
const operations = await OfflineManager.getPendingOperations(); const operations = await OfflineManager.getPendingOperations();
for (const operation of operations) { for (const operation of operations) {
try { try {
await processPendingOperation(operation); await processPendingOperation(operation);
@@ -61,13 +61,13 @@ export const useOffline = () => {
); );
} }
} }
// Recarregar operações pendentes // Recarregar operações pendentes
await loadPendingOperations(); await loadPendingOperations();
// Invalidar queries para atualizar dados // Invalidar queries para atualizar dados
invalidateQueries.all(); invalidateQueries.all();
console.log('Sincronização concluída'); console.log('Sincronização concluída');
} catch (error) { } catch (error) {
console.error('Error syncing pending operations:', error); console.error('Error syncing pending operations:', error);
@@ -121,12 +121,16 @@ export const useOffline = () => {
if (!isOnline) return; if (!isOnline) return;
try { try {
// Prevenir 401 chamando o cache apenas se o usuário estiver logado
const { data: { session } } = await supabase.auth.getSession();
if (!session) return;
// Cache usuários // Cache usuários
const { data: usuarios } = await supabase const { data: usuarios } = await supabase
.from('usuarios') .from('usuarios')
.select('*') .select('*')
.eq('ativo', true); .eq('ativo', true);
if (usuarios) { if (usuarios) {
await OfflineManager.cacheData('usuarios', usuarios); await OfflineManager.cacheData('usuarios', usuarios);
} }
@@ -135,7 +139,7 @@ export const useOffline = () => {
const { data: obras } = await supabase const { data: obras } = await supabase
.from('obras') .from('obras')
.select('*'); .select('*');
if (obras) { if (obras) {
await OfflineManager.cacheData('obras', obras); await OfflineManager.cacheData('obras', obras);
} }
@@ -143,19 +147,19 @@ export const useOffline = () => {
// Cache RDOs (últimos 30 dias) // Cache RDOs (últimos 30 dias)
const thirtyDaysAgo = new Date(); const thirtyDaysAgo = new Date();
thirtyDaysAgo.setDate(thirtyDaysAgo.getDate() - 30); thirtyDaysAgo.setDate(thirtyDaysAgo.getDate() - 30);
const { data: rdos } = await supabase const { data: rdos } = await supabase
.from('rdos') .from('rdos')
.select('*') .select('*')
.gte('created_at', thirtyDaysAgo.toISOString()); .gte('created_at', thirtyDaysAgo.toISOString());
if (rdos) { if (rdos) {
await OfflineManager.cacheData('rdos', rdos); await OfflineManager.cacheData('rdos', rdos);
} }
// Salvar timestamp da última sincronização // Salvar timestamp da última sincronização
await OfflineManager.setConfig('lastFullSync', Date.now()); await OfflineManager.setConfig('lastFullSync', Date.now());
console.log('Dados cacheados para uso offline'); console.log('Dados cacheados para uso offline');
} catch (error) { } catch (error) {
console.error('Error caching data for offline:', error); console.error('Error caching data for offline:', error);
@@ -460,10 +464,10 @@ export const useOfflineStats = () => {
useEffect(() => { useEffect(() => {
loadStats(); loadStats();
// Atualizar estatísticas a cada 30 segundos // Atualizar estatísticas a cada 30 segundos
const interval = setInterval(loadStats, 30000); const interval = setInterval(loadStats, 30000);
return () => clearInterval(interval); return () => clearInterval(interval);
}, [loadStats]); }, [loadStats]);