# AI_CONTEXT.md - GEOSECTOR ## Informations Générales - **Nom du Projet**: GEOSECTOR - **Type de Projet**: Projet hybride avec un site web en Svelte 5, une application Web et mobile Flutter et une API PHP8.3 avec base de données centrale MariaDB - **Description**: Gestion de la distribution des calendriers pour les amicales de pompiers - **Date de Début**: 01/03/2025 - **Statut Actuel**: [En développement] - **Lien GitLab**: [http://51.68.36.203:35788/d6soft/geosector] ## Structure du Projet ### Architecture Générale - Un dossier /web pour le site web en Svelte 5 + Vite et TailwindCSS sans SvelteKit - Un dossier /app pour l'application Flutter avec Hive pour stocker en local les données de l'utilisateur - Un dossier /api pour l'API PHP 8.3 avec une base de données centrale MariaDB 11 ### Structure des Dossiers #### Application Flutter (/app) - **/lib/core/data/models/** : Modèles de données avec annotations Hive pour le stockage local - **/lib/core/repositories/** : Gestion des données et communication avec l'API - **/lib/core/services/** : Services d'API, de synchronisation et utilitaires - **/lib/core/constants/** : Constantes de l'application, clés API et endpoints - **/lib/presentation/** : Interface utilisateur, pages et widgets - **/lib/chat/** : Fonctionnalités de messagerie #### API PHP (/api) - **/src/Controllers/** : Contrôleurs pour les différentes fonctionnalités - **/src/Core/** : Classes de base pour la gestion des requêtes, sessions, etc. - **/src/Services/** : Services pour l'authentification, le chiffrement, etc. ### Composants Principaux #### Gestion des Utilisateurs et Authentification - **UserRepository** : Gère les utilisateurs, l'authentification et les sessions - **ApiService** : Communication avec l'API, gestion des tokens de session - **Session** (PHP) : Gestion des sessions côté serveur - **LoginController** (PHP) : Authentification et déconnexion #### Stockage Local avec Hive - **UserModel** : Modèle utilisateur avec annotations Hive (typeId: 0) - **AmicaleModel** : Modèle pour les amicales (typeId: 11) - **OperationModel**, **SectorModel**, **PassageModel** : Modèles pour les opérations de terrain #### Interface Utilisateur - **LoginPage** : Page de connexion avec détection du type d'utilisateur - **SplashPage** : Page de démarrage et initialisation - **EntiteForm** : Formulaire de gestion des amicales avec géolocalisation automatique #### Géolocalisation et Cartographie - **MapboxMap** : Widget de carte pour afficher la position des amicales - **findFireStationCoordinates** : Service API pour localiser les casernes de pompiers via adresse.gouv.fr ## Technologies et Frameworks ### Langages de Programmation - **Dart** : Pour l'application Flutter - **PHP 8.3** : Pour l'API backend - **JavaScript/TypeScript** : Pour le site web Svelte ### Frameworks et Bibliothèques - **Flutter** : Framework UI cross-platform - **Hive** : Base de données NoSQL locale pour Flutter - **Dio** : Client HTTP pour les requêtes API - **GoRouter** : Navigation et routage dans Flutter - **Svelte 5** : Framework UI pour le site web - **Flutter Map** : Bibliothèque de cartographie pour Flutter ### APIs Externes - **API Adresse.gouv.fr** : Utilisée pour la géolocalisation des adresses et des casernes de pompiers - **Stripe API** : Intégration pour les paiements par carte bancaire (commission de 1.4%) ### Base de Données - **Type**: MariaDB - **Version**: 11 - **Schéma**: Structure principale dans `docs/geo_app.dump` avec tables pour utilisateurs, opérations, secteurs, passages - **Stockage Local**: Hive pour le stockage local dans l'application Flutter ### Outils de Développement - **Gestionnaire de Paquets**: [Composer] - **Outils de Build**: [Webpack / Vite / Flutter CLI] - **Outils de Test**: [PHPUnit / Jest / Flutter Test] - **Linters/Formatters**: [PHP_CodeSniffer / ESLint / Dart Analyzer] ## Conventions de Code ### Style de Code - [PSR-12 pour PHP] ### Conventions de Nommage - **Classes**: [PascalCase] - **Méthodes/Fonctions**: [camelCase] - **Variables**: [camelCase] - **Constantes**: [UPPER_SNAKE_CASE] - **Fichiers**: [kebab-case.ext / PascalCase.ext] ### Pratiques Spécifiques au Projet - Chiffrement des données sensibles (noms, emails, téléphones) dans la base de données - Mise à jour automatique des coordonnées GPS lors des changements d'adresse - Confirmation utilisateur pour les actions ayant un impact financier (activation Stripe) ## Flux de Travail et Processus de Développement ### Branches GitLab - **main**: Code stable prêt pour la production - **develop**: Branche d'intégration pour les fonctionnalités en cours de développement - **feature/[feature-name]**: Branches de développement pour les nouvelles fonctionnalités - Exemple: `feature/geolocalisation-casernes` pour l'ajout de la géolocalisation des casernes - **bugfix/[bug-name]**: Branches pour les corrections de bugs - **release/[version]**: Branches de préparation des versions ### Processus de Merge Request 1. Créer une branche à partir de `main` ou `develop` selon la nature du changement ```bash git checkout -b feature/nom-de-la-fonctionnalite main ``` 2. Développer la fonctionnalité ou correction avec des commits atomiques ```bash git add fichier1 fichier2 git commit -m "Description claire du changement" ``` 3. Pousser la branche vers le dépôt distant ```bash git push -u origin feature/nom-de-la-fonctionnalite ``` 4. Créer une Merge Request via l'interface GitLab ou en utilisant l'URL fournie - URL: `http://51.68.36.203/d6soft/geosector/-/merge_requests/new?merge_request%5Bsource_branch%5D=feature/nom-de-la-fonctionnalite` 5. Attendre la revue de code et les validations CI/CD 6. Une fois approuvée, fusionner la branche: ```bash git checkout main git merge feature/nom-de-la-fonctionnalite git push origin main ``` ### CI/CD Pipeline Le projet utilise un pipeline CI/CD GitLab pour automatiser les tests et le déploiement: 1. **Build**: Compilation du code et vérification de la syntaxe - PHP: Vérification de la syntaxe et des dépendances Composer - Flutter: Compilation et génération des assets 2. **Test**: Exécution des tests automatisés - Tests unitaires pour l'API PHP - Tests de widgets pour l'application Flutter 3. **Deploy**: Déploiement automatique vers les environnements - Déploiement vers DEV après chaque merge dans `develop` - Déploiement vers RECETTE après validation manuelle - Déploiement vers PROD après validation manuelle sur une MR vers `main` ## Intégration avec GitLab ### Issues et Kanban - **Labels**: - `feature`: Nouvelles fonctionnalités - `bug`: Corrections de bugs - `enhancement`: Améliorations de fonctionnalités existantes - `documentation`: Mises à jour de la documentation - `api`: Modifications de l'API - `ui`: Modifications de l'interface utilisateur - `priority:high`: Priorité élevée - `priority:medium`: Priorité moyenne - `priority:low`: Priorité basse - **Milestones**: - Organisées par versions majeures (1.0, 1.1, etc.) - Chaque milestone contient les issues prévues pour la version - Date d'échéance définie pour chaque milestone - **Boards**: - **Backlog**: Issues à traiter dans le futur - **To Do**: Issues prêtes à être développées - **In Progress**: Issues en cours de développement - **Review**: Issues en attente de revue de code - **Done**: Issues terminées et déployées ### Automatisations - **Webhooks**: Notifications automatiques dans Slack pour les événements importants - Nouvelles Merge Requests - Commentaires sur les MRs - Builds échoués - Déploiements réussis - **Merge Request Templates**: Templates prédéfinis pour les MRs avec: - Description de la fonctionnalité - Checklist de vérification - Instructions de test - Captures d'écran (si applicable) - **CI/CD Automatisé**: Déclenchement automatique des pipelines sur: - Push vers une branche - Création d'une Merge Request - Mise à jour d'une Merge Request ## Déploiement ### Environnements - Un environnement DEV dans un container Incus Alpine distant dva-geo - Un environnement RECETTE dans un container Incus Alpine distant rca-geo - Un environnement PROD dans un container Incus Alpine distant pra-geo ### Processus de Déploiement - Un script /web/deploy-web.sh pour déployer le site Web sur l'environnement DEV - Un script /app/deploy-app.sh pour déployer l'application Flutter Web sur l'environnement DEV - Un script /api/deploy-api.sh pour déployer l'API PHP sur l'environnement DEV - Un script /web/livre-web.sh $0 $1 pour livrer le site web d'un environnement $0 à l'autre $1 - Un script /app/livre-app.sh $0 $1 pour livrer l'application Flutter Web d'un environnement $0 à l'autre $1 - Un script /api/livre-api.sh $0 $1 pour livrer l'API PHP d'un environnement $0 à l'autre $1 ## Ressources et Documentation ### Documentation Interne - [Liens vers la documentation interne] ### API Documentation - [Liens vers la documentation API (Swagger/OpenAPI)] ### Ressources Externes - [Liens vers des ressources externes pertinentes] ## Contacts ### Équipe Principale - **[Nom]**: [Rôle] - [Email/GitLab username] ### Parties Prenantes - **[Nom]**: [Rôle/Organisation] - [Contact] ## Historique des Versions | Version | Date | Description | | ------- | ---------- | -------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------- | | 1.0.0 | 01/03/2025 | Version initiale du projet | | 1.1.0 | 16/05/2025 | Ajout de la géolocalisation automatique des casernes de pompiers via API adresse.gouv.fr, amélioration du formulaire EntiteForm avec confirmation pour l'activation des paiements Stripe, mise à jour automatique des coordonnées GPS lors des changements d'adresse |