index.ts 3.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102
  1. import * as SQLite from 'expo-sqlite';
  2. import NetInfo, { NetInfoState } from '@react-native-community/netinfo';
  3. import { StoreType, storage } from 'src/storage';
  4. import { fetchLimitedRanking, fetchLpi, fetchInHistory, fetchInMemoriam } from '@api/ranking';
  5. import { initTilesDownload } from './tilesService';
  6. import { downloadFlags } from './flagsService';
  7. import { fetchAndSaveAllTypesAndMasters } from './unMastersService';
  8. import { updateAvatars } from './avatarsService';
  9. import { fetchAndSaveStatistics } from './statisticsService';
  10. import { saveTriumphsData } from './triumphsService';
  11. import { saveSeriesRankingData } from './seriesRankingService';
  12. import { updateDarePlacesDb, updateNmRegionsDb } from 'src/db';
  13. import { refreshJsonData } from './geojsonService';
  14. const db = SQLite.openDatabase('nomadManiaDb.db');
  15. const lastUpdateDate = storage.get('lastUpdateDate', StoreType.STRING) as string || '1990-01-01';
  16. const lastUpdateNmRegions = storage.get('lastUpdateNmRegions', StoreType.STRING) as string || '1990-01-01';
  17. const lastUpdateDarePlaces = storage.get('lastUpdateDarePlaces', StoreType.STRING) as string || '1990-01-01';
  18. export const initializeDatabase = (): Promise<void> => {
  19. return new Promise<void>((resolve, reject) => {
  20. db.transaction(tx => {
  21. createSyncTriggers('tableName');
  22. resolve();
  23. }, error => {
  24. console.error('DB initialization error: ', error);
  25. reject(error);
  26. });
  27. });
  28. };
  29. const createSyncTriggers = (tableName: string): void => {
  30. };
  31. export const checkInternetConnection = async (): Promise<NetInfoState> => {
  32. const state = await NetInfo.fetch();
  33. return state;
  34. };
  35. export const syncDataWithServer = async (): Promise<void> => {
  36. const userId = storage.get('uid', StoreType.STRING) as string;
  37. const { isConnected } = await checkInternetConnection();
  38. if (isConnected) {
  39. console.log('Syncing data with server...');
  40. processSyncQueue();
  41. await refreshJsonData();
  42. await updateMasterRanking();
  43. await downloadFlags();
  44. await updateAvatars(lastUpdateDate);
  45. await updateNmRegionsDb(lastUpdateNmRegions);
  46. await updateDarePlacesDb(lastUpdateDarePlaces);
  47. await initTilesDownload(userId);
  48. }
  49. };
  50. const processSyncQueue = (): void => {
  51. };
  52. export const updateStaticGeoJSON = async (): Promise<void> => {
  53. };
  54. export const setupDatabaseAndSync = async (): Promise<void> => {
  55. await initializeDatabase();
  56. await syncDataWithServer();
  57. await updateStaticGeoJSON();
  58. };
  59. const updateMasterRanking = async () => {
  60. const token = storage.get('token', StoreType.STRING) as string || '';
  61. const dataLimitedRanking = await fetchLimitedRanking();
  62. if (dataLimitedRanking && dataLimitedRanking.data) {
  63. storage.set('masterRanking', JSON.stringify(dataLimitedRanking.data));
  64. }
  65. const dataLpi = await fetchLpi();
  66. if (dataLpi && dataLpi.data) {
  67. storage.set('lpiRanking', JSON.stringify(dataLpi.data));
  68. }
  69. const dataInHistory = await fetchInHistory();
  70. if (dataInHistory && dataInHistory.data) {
  71. storage.set('inHistoryRanking', JSON.stringify(dataInHistory.data));
  72. }
  73. const dataInMemoriam = await fetchInMemoriam();
  74. if (dataInMemoriam && dataInMemoriam.data) {
  75. storage.set('inMemoriamRanking', JSON.stringify(dataInMemoriam.data));
  76. }
  77. await fetchAndSaveStatistics(token);
  78. await fetchAndSaveAllTypesAndMasters();
  79. await saveTriumphsData();
  80. await saveSeriesRankingData();
  81. };
  82. export default setupDatabaseAndSync;