# 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 ## 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 ### 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 [Toute convention ou pratique spécifique à ce projet] ## Flux de Travail et Processus de Développement ### Branches GitLab - **main/master**: [Production-ready code] - **develop**: [Integration branch for features] - **feature/[feature-name]**: [Feature development] - **bugfix/[bug-name]**: [Bug fixes] - **release/[version]**: [Release preparation] ### Processus de Merge Request 1. [Créer une branche à partir de develop] 2. [Développer la fonctionnalité/correction] 3. [Soumettre une MR vers develop] 4. [Code review] 5. [CI/CD validation] 6. [Merge] ### CI/CD Pipeline [Description de votre pipeline CI/CD dans GitLab] ## Intégration avec GitLab ### Issues et Kanban - **Labels**: [Liste des labels principaux et leur signification] - **Milestones**: [Comment les milestones sont utilisées] - **Boards**: [Description des tableaux Kanban] ### Automatisations [Description des automatisations GitLab utilisées] ## 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 | [Date] | [Description] | ## Processus d'Authentification et Gestion des Sessions ### Flux de Connexion 1. L'utilisateur entre ses identifiants dans la page de login (username/password) 2. L'application envoie une requête POST à `/api/login` avec les identifiants et le type de connexion (user/admin) 3. Le serveur vérifie les identifiants, crée une session PHP et renvoie: - Un `session_id` (utilisé comme token Bearer) - Une date d'expiration de session - Les données de l'utilisateur et les données associées (opérations, secteurs, passages) 4. L'application stocke ces données dans des boîtes Hive locales 5. Le `session_id` est utilisé pour toutes les requêtes API suivantes ### Flux de Déconnexion 1. L'utilisateur demande une déconnexion 2. L'application envoie une requête POST à `/api/logout` avec le `session_id` dans l'en-tête 3. Le serveur détruit la session PHP avec `session_unset()` et `session_destroy()` 4. L'application: - Vide toutes les boîtes Hive sauf la boîte utilisateur - Conserve uniquement le username et le rôle de l'utilisateur pour faciliter la reconnexion - Réinitialise le `session_id` à null ### Particularités - La page de login vérifie le rôle de l'utilisateur avant de pré-remplir le champ username - Le type de connexion (user/admin) détermine les données chargées et les droits d'accès - Les utilisateurs avec rôle=1 sont des utilisateurs standards, ceux avec rôle>1 sont des administrateurs - Les sessions expirent après 24 heures par défaut ## Notes Spécifiques pour les Assistants IA - Toujours vérifier les issues GitLab avant de proposer des solutions - Respecter strictement les conventions de code mentionnées ci-dessus - Lors de modifications des modèles Hive, s'assurer que les typeId sont uniques pour éviter les conflits - Vérifier la compatibilité des modifications avec les trois plateformes (web, iOS, Android) - Pour les modifications de l'API, s'assurer que la réponse reste compatible avec le format attendu par l'application