import * as SQLite from 'expo-sqlite'; import NetInfo, { NetInfoState } from '@react-native-community/netinfo'; import { StoreType, getOnlineStatus, storage } from 'src/storage'; import { fetchLimitedRanking, fetchLpi, fetchInHistory, fetchInMemoriam } from '@api/ranking'; import { initTilesDownload } from './tilesService'; const db = SQLite.openDatabase('nomadManiaDb.db'); export const initializeDatabase = (): Promise => { return new Promise((resolve, reject) => { db.transaction(tx => { createSyncTriggers('tableName'); resolve(); }, error => { console.error('DB initialization error: ', error); reject(error); }); }); }; const createSyncTriggers = (tableName: string): void => { }; export const checkInternetConnection = async (): Promise => { const state = await NetInfo.fetch(); return state; }; export const syncDataWithServer = async (): Promise => { const userId = storage.get('uid', StoreType.STRING) as string; const { isConnected, isInternetReachable } = await checkInternetConnection(); const isOnline = getOnlineStatus(); if (isConnected && isInternetReachable && isOnline) { console.log('Syncing data with server...'); processSyncQueue(); await updateAvatars(); await updateMasterRanking(); await initTilesDownload(userId); } }; const processSyncQueue = (): void => { }; export const updateAvatars = async (): Promise => { }; export const updateStaticGeoJSON = async (): Promise => { }; export const setupDatabaseAndSync = async (): Promise => { await initializeDatabase(); await syncDataWithServer(); await updateStaticGeoJSON(); }; const updateMasterRanking = async () => { const dataLimitedRanking = await fetchLimitedRanking(); if (dataLimitedRanking && dataLimitedRanking.data) { storage.set('masterRanking', JSON.stringify(dataLimitedRanking.data)); } const dataLpi = await fetchLpi(); if (dataLpi && dataLpi.data) { storage.set('lpiRanking', JSON.stringify(dataLpi.data)); } const dataInHistory = await fetchInHistory(); if (dataInHistory && dataInHistory.data) { storage.set('inHistoryRanking', JSON.stringify(dataInHistory.data)); } const dataInMemoriam = await fetchInMemoriam(); if (dataInMemoriam && dataInMemoriam.data) { storage.set('inMemoriamRanking', JSON.stringify(dataInMemoriam.data)); } }; export default setupDatabaseAndSync;