Lâapplication initialise automatiquement la base de donnĂ©es GTFS au premier lancement !
Plus besoin dâexĂ©cuter manuellement node scripts/createGTFSDatabase.js đ
Quand lâutilisateur lance lâapplication pour la premiĂšre fois :
gtfs.db existesrc/
âââ services/
â âââ gtfsInitializationService.ts â Service d'initialisation
âââ components/
â âââ DatabaseInitializationScreen.tsx đš Ăcran de chargement
âââ hooks/
âââ useGTFSInitialization.ts đŁ Hook React
App.tsx đ± ModifiĂ© pour l'auto-init
Lâutilisateur voit un bel Ă©cran avec :
Ătapes affichĂ©es :
import { gtfsInitService } from './src/services/gtfsInitializationService';
// Vérifier si déjà initialisée
const isInit = await gtfsInitService.isDatabaseInitialized();
// Initialiser avec callback de progression
await gtfsInitService.initializeDatabase((progress) => {
console.log(`${progress.step}: ${progress.progress}%`);
console.log(progress.message);
});
// Réinitialiser (forcer la recréation)
await gtfsInitService.resetDatabase();
await gtfsInitService.initializeDatabase();
import { useGTFSInitialization } from './src/hooks/useGTFSInitialization';
function MyComponent() {
const { isInitializing, isInitialized, progress, error } = useGTFSInitialization();
if (isInitializing) {
return <Text>Chargement... {progress.progress}%</Text>;
}
if (error) {
return <Text>Erreur: {error.message}</Text>;
}
return <Text>PrĂȘt !</Text>;
}
Le service lit les fichiers depuis assets/sncf_data/ :
// Charge automatiquement depuis les assets
const rows = await this.readCSVFromAssets('stops.txt');
Si lâinitialisation Ă©choue :
â ZĂ©ro configuration : Pas de manipulation manuelle â ExpĂ©rience fluide : Ăcran de chargement professionnel â Feedback visuel : Progression en temps rĂ©el â Fiable : Gestion dâerreurs robuste
â Automatique : Plus besoin de script manuel â RĂ©utilisable : Service standalone â Testable : Hook React isolĂ© â Maintenable : Code TypeScript typĂ©
| Opération | Durée |
|---|---|
| Vérification DB existante | < 100ms |
| Création structure | < 1s |
| Import gares (~3000) | ~5s |
| Import lignes | ~2s |
| Import trajets (~20k) | ~15s |
| Import horaires âł | ~2-3 min |
| Import calendriers | ~10s |
| Création vues/index | ~30s |
| Total premiĂšre fois | ~3-5 min |
| Lancements suivants | < 1s |
# Développeur
npm install --save-dev better-sqlite3
node scripts/createGTFSDatabase.js
# Utilisateur final
â Impossible ! NĂ©cessite Node.js
# Développeur
npm start
# â
DB créée automatiquement !
# Utilisateur final
# Lance l'app
# â
DB créée automatiquement !
Ăditer src/services/gtfsInitializationService.ts :
// Nom de la DB
private dbName = 'gtfs.db';
// Temps de correspondance
WHERE transfer_time_minutes >= 5 // Minimum
AND transfer_time_minutes <= 120; // Maximum
import { gtfsInitService } from './src/services/gtfsInitializationService';
// Supprimer la DB existante
await gtfsInitService.resetDatabase();
// Relancer l'app, elle se recréera automatiquement
assets/sncf_data/npx react-native log-android ou log-iosgtfsInitService.resetDatabase()// Dans un composant ou un script
await gtfsInitService.resetDatabase();
// Relancer l'app
import React from 'react';
import { StatusBar } from 'expo-status-bar';
import AppNavigator from './src/navigation/AppNavigatorSimple';
import { DatabaseInitializationScreen } from './src/components/DatabaseInitializationScreen';
import { useGTFSInitialization } from './src/hooks/useGTFSInitialization';
export default function App() {
const { isInitializing, progress } = useGTFSInitialization();
// Ăcran de chargement pendant l'initialisation
if (isInitializing) {
return <DatabaseInitializationScreen progress={progress} />;
}
// Application normale
return (
<>
<AppNavigator />
<StatusBar style="auto" />
</>
);
}
import { gtfsDbEnhanced } from './src/services/gtfsDatabaseServiceEnhanced';
// La DB est garantie d'ĂȘtre initialisĂ©e ici
const journeys = await gtfsDbEnhanced.findAllJourneys(
fromStopId,
toStopId,
departureTime,
2
);
Avant de publier lâapp :
assets/sncf_data/App.tsx utilise le hook dâinitialisationLâapplication est maintenant 100% autonome !
Câest magique ! đȘ