# Guide de migration vers la nouvelle structure Ce document explique comment migrer l'application GeoSector vers la nouvelle structure de dossiers. ## Nouvelle structure ``` lib/ ├── presentation/ # Tout ce qui concerne l'interface utilisateur │ ├── admin/ # Pages et widgets spécifiques à l'interface administrateur │ ├── user/ # Pages et widgets spécifiques à l'interface utilisateur │ │ └── pages/ # Pages de l'interface utilisateur │ ├── auth/ # Pages et widgets liés à l'authentification │ ├── public/ # Pages et widgets accessibles sans authentification │ └── widgets/ # Widgets partagés utilisés dans plusieurs parties de l'application ├── core/ # Logique métier et services (reste inchangé) │ ├── constants/ # Constantes de l'application │ ├── data/ # Modèles de données │ ├── repositories/ # Repositories pour accéder aux données │ ├── services/ # Services de l'application │ └── theme/ # Thème de l'application └── shared/ # Code partagé entre les différentes parties de l'application ``` ## Étapes de migration ### 1. Widgets communs Les widgets communs ont déjà été migrés vers `lib/presentation/widgets/` : - `dashboard_app_bar.dart` - `dashboard_layout.dart` - `responsive_navigation.dart` ### 2. Pages administrateur Migrer les pages administrateur de `lib/features/admin/` vers `lib/presentation/admin/` : - `admin_dashboard_page.dart` (déjà migré) - `admin_statistics_page.dart` - `admin_history_page.dart` - `admin_communication_page.dart` - `admin_map_page.dart` ### 3. Pages utilisateur Migrer les pages utilisateur de `lib/features/user/presentation/pages/` vers `lib/presentation/user/pages/` : - Créer le dossier `lib/presentation/user/pages/` - Migrer les fichiers suivants : - `user_dashboard_home_page.dart` - `user_statistics_page.dart` - `user_history_page.dart` - `user_communication_page.dart` - `user_map_page.dart` ### 4. Pages d'authentification Migrer les pages d'authentification de `lib/features/auth/presentation/` vers `lib/presentation/auth/` : - `login_page.dart` - `register_page.dart` - `forgot_password_page.dart` - etc. ### 5. Pages publiques Migrer les pages publiques de `lib/features/public/presentation/` vers `lib/presentation/public/` : - `landing_page.dart` - `about_page.dart` - etc. ### 6. Mise à jour des imports Après avoir migré tous les fichiers, il faudra mettre à jour les imports dans tous les fichiers pour refléter la nouvelle structure. Exemple : ```dart // Ancien import import 'package:geosector_app/core/widgets/dashboard_app_bar.dart'; // Nouvel import import 'package:geosector_app/presentation/widgets/dashboard_app_bar.dart'; ``` ### 7. Mise à jour des routes Mettre à jour le fichier de routes (`lib/core/routes/app_router.dart`) pour refléter les nouveaux chemins des pages. ### 8. Tests Après avoir effectué toutes les migrations, exécuter les tests pour s'assurer que tout fonctionne correctement. ## Avantages de la nouvelle structure 1. **Séparation claire des responsabilités** : La nouvelle structure sépare clairement la présentation (UI) de la logique métier (core). 2. **Organisation par fonctionnalité** : Les fichiers sont organisés par fonctionnalité (admin, user, auth, public) plutôt que par type (pages, widgets). 3. **Facilité de maintenance** : Il est plus facile de trouver et de modifier les fichiers liés à une fonctionnalité spécifique. 4. **Évolutivité** : La nouvelle structure est plus évolutive et permet d'ajouter facilement de nouvelles fonctionnalités. ## Approche progressive La migration peut être effectuée progressivement, en commençant par les widgets communs, puis en migrant les pages une par une. Cela permet de continuer à développer l'application pendant la migration. ## Exemple de migration d'une page Voici un exemple de migration de la page `admin_dashboard_page.dart` : 1. Copier le fichier de `lib/features/admin/admin_dashboard_page.dart` vers `lib/presentation/admin/admin_dashboard_page.dart` 2. Mettre à jour les imports dans le nouveau fichier 3. Mettre à jour les références à ce fichier dans d'autres fichiers 4. Tester que tout fonctionne correctement 5. Supprimer l'ancien fichier une fois que tout fonctionne ## Conclusion Cette migration permettra d'améliorer la structure de l'application et de faciliter son évolution future. Elle peut être effectuée progressivement pour minimiser l'impact sur le développement en cours.