# 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.
