index.ts 2.4 KB

12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485
  1. import * as SQLite from 'expo-sqlite';
  2. import NetInfo, { NetInfoState } from '@react-native-community/netinfo';
  3. import { StoreType, getOnlineStatus, storage } from 'src/storage';
  4. import { fetchLimitedRanking, fetchLpi, fetchInHistory, fetchInMemoriam } from '@api/ranking';
  5. import { initTilesDownload } from './tilesService';
  6. const db = SQLite.openDatabase('nomadManiaDb.db');
  7. export const initializeDatabase = (): Promise<void> => {
  8. return new Promise<void>((resolve, reject) => {
  9. db.transaction(tx => {
  10. createSyncTriggers('tableName');
  11. resolve();
  12. }, error => {
  13. console.error('DB initialization error: ', error);
  14. reject(error);
  15. });
  16. });
  17. };
  18. const createSyncTriggers = (tableName: string): void => {
  19. };
  20. export const checkInternetConnection = async (): Promise<NetInfoState> => {
  21. const state = await NetInfo.fetch();
  22. return state;
  23. };
  24. export const syncDataWithServer = async (): Promise<void> => {
  25. const userId = storage.get('uid', StoreType.STRING) as string;
  26. const { isConnected, isInternetReachable } = await checkInternetConnection();
  27. const isOnline = getOnlineStatus();
  28. if (isConnected && isInternetReachable && isOnline) {
  29. console.log('Syncing data with server...');
  30. processSyncQueue();
  31. await updateAvatars();
  32. await updateMasterRanking();
  33. await initTilesDownload(userId);
  34. }
  35. };
  36. const processSyncQueue = (): void => {
  37. };
  38. export const updateAvatars = async (): Promise<void> => {
  39. };
  40. export const updateStaticGeoJSON = async (): Promise<void> => {
  41. };
  42. export const setupDatabaseAndSync = async (): Promise<void> => {
  43. await initializeDatabase();
  44. await syncDataWithServer();
  45. await updateStaticGeoJSON();
  46. };
  47. const updateMasterRanking = async () => {
  48. const dataLimitedRanking = await fetchLimitedRanking();
  49. if (dataLimitedRanking && dataLimitedRanking.data) {
  50. storage.set('masterRanking', JSON.stringify(dataLimitedRanking.data));
  51. }
  52. const dataLpi = await fetchLpi();
  53. if (dataLpi && dataLpi.data) {
  54. storage.set('lpiRanking', JSON.stringify(dataLpi.data));
  55. }
  56. const dataInHistory = await fetchInHistory();
  57. if (dataInHistory && dataInHistory.data) {
  58. storage.set('inHistoryRanking', JSON.stringify(dataInHistory.data));
  59. }
  60. const dataInMemoriam = await fetchInMemoriam();
  61. if (dataInMemoriam && dataInMemoriam.data) {
  62. storage.set('inMemoriamRanking', JSON.stringify(dataInMemoriam.data));
  63. }
  64. };
  65. export default setupDatabaseAndSync;