Cahier des Charges Application de Gestion de Notes Multi-Plateforme
Sommaire
- 1- Introduction
- 1.1- Contexte et Objectif
- 1.2- Portée du Projet
- 2- Besoins Fonctionnels
- 2.1- Gestion des Utilisateurs
- 2.2- Gestion des Notes
- 2.3- Fonctionnalités de Partage
- 2.4- Fonctionnalités Hors-Ligne
- 2.5- Expérience Utilisateur
- 3- Spécifications Techniques
- 3.1- Architecture Backend (Spring Boot)
- 3.2- Architecture Frontend (Flutter)
- 3.3- Modèle de Données
- 3.3.1- User
- 3.3.2- Note
- 3.3.3- Tag
- 3.3.4- NoteTag (Table de liaison)
- 3.3.5- Share
- 3.3.6- PublicLink
- 3.4- API Endpoints
- 3.4.1- Authentification
- 3.4.2- Gestion des Notes
- 3.4.3- Gestion des Tags
- 3.4.4- Partage
- 3.5- Fonctionnalités Mobile (Flutter)
- 3.5.1- Écrans
- 3.5.2- Stratégie Offline
- 4- Contraintes Techniques
- 4.1- Sécurité
- 4.2- Performance
- 4.3- Compatibilité
- 5- Environnement et Déploiement
- 5.1- Développement
- 5.2- Containerisation
- 5.3- Déploiement
- 6- Livrables
- 6.1- Code Source
- 6.2- Documentation
- 6.3- Tests
- 7- Planning et Échéances
- 7.1- Phase 1 : Setup et Authentification (Semaine 1)
- 7.2- Phase 2 : Gestion des Notes (Semaine 2-3)
- 7.3- Phase 3 : Partage et Synchronisation (Semaine 4)
- 7.4- Phase 4 : Finalisation et Tests (Semaine 5)
- 8- Critères d'Acceptation
- 9- Conclusion
- 9.1.1- Cours Flutter
Cahier des Charges Application de Gestion de Notes Multi-Plateforme
-
Introduction
-
Contexte et Objectif
- Développer une application de gestion de notes sécurisée, multi-plateforme, fonctionnant en mode connecté et déconnecté, avec des fonctionnalités de partage et de collaboration.
-
Portée du Projet
- Application web et mobile avec synchronisation des données
- API RESTful sécurisée avec authentification JWT
- Base de données relationnelle avec persistance des données
- Architecture microservices containerisée
-
Besoins Fonctionnels
-
Gestion des Utilisateurs
- Inscription avec email et mot de passe
- Authentification sécurisée via JWT
- Gestion de profil utilisateur
-
Gestion des Notes
- Création, consultation, modification et suppression des notes
- Édition de contenu en Markdown avec prévisualisation
- Système de tags pour l’organisation des notes
- Recherche et filtrage par titre, contenu et tags
- Gestion de la visibilité (privée, partagée, publique)
-
Fonctionnalités de Partage
- Partage avec d’autres utilisateurs avec permissions en lecture
- Génération de liens publics avec expiration optionnelle
- Gestion des accords de partage
-
Fonctionnalités Hors-Ligne
- Accès en mode déconnecté avec cache local
- Synchronisation automatique lors de la reconnexion
- File d’opérations en attente pour les modifications offline
- Gestion des conflits par stratégie Last-Write-Wins
-
Expérience Utilisateur
- Interface moderne et responsive
- Indicateurs d’état (en ligne/hors ligne, synchronisation)
- Pull-to-refresh pour actualisation manuelle
- États vides et messages d’information
-
Spécifications Techniques
-
Architecture Backend (Spring Boot)
- API RESTful avec endpoints documentés
- Authentification JWT avec refresh tokens
- Base de données PostgreSQL avec ORM JPA/Hibernate
- Couches applicatives (Controller, Service, Repository)
- Gestion des erreurs et validation des données
- Configuration CORS pour les appels cross-origin
-
Architecture Frontend (Flutter)
- Application multiplateforme (iOS, Android, Web)
- State management avec Provider/Riverpod
- Cache local avec SQLite ou Hive
- Synchronisation bidirectionnelle avec l’API
- Interface responsive et adaptive design
-
Modèle de Données
-
User
- id (PK, Auto-incrément)
- email (Unique, Non-null)
- password_hash (Non-null)
- created_at (Timestamp)
-
Note
- id (PK, Auto-incrément)
- owner_id (FK vers User, Non-null)
- title (Non-null)
- content_md (Text)
- visibility (Enum: PRIVATE|SHARED|PUBLIC)
- created_at (Timestamp)
- updated_at (Timestamp)
-
Tag
- id (PK, Auto-incrément)
- label (Unique, Non-null)
-
NoteTag (Table de liaison)
- note_id (FK vers Note, PK)
- tag_id (FK vers Tag, PK)
-
Share
- id (PK, Auto-incrément)
- note_id (FK vers Note, Non-null)
- shared_with_user_id (FK vers User, Non-null)
- permission (Enum: READ)
-
PublicLink
- id (PK, Auto-incrément)
- note_id (FK vers Note, Non-null)
- url_token (Unique, Non-null)
- expires_at (Timestamp, Optionnel)
-
API Endpoints
-
Authentification
- POST /api/auth/register – Inscription utilisateur
- POST /api/auth/login – Connexion utilisateur
- POST /api/auth/refresh – Rafraîchissement du token
- POST /api/auth/logout – Déconnexion
-
Gestion des Notes
- GET /api/notes – Liste des notes (avec filtres)
- POST /api/notes – Création d’une note
- GET /api/notes/{id} – Détails d’une note
- PUT /api/notes/{id} – Modification d’une note
- DELETE /api/notes/{id} – Suppression d’une note
-
Gestion des Tags
- GET /api/tags – Liste des tags
- POST /api/tags – Création d’un tag
-
Partage
- POST /api/notes/{id}/share – Partage d’une note
- GET /api/notes/{id}/shares – Liste des partages
- DELETE /api/shares/{id} – Révoquer un partage
- POST /api/notes/{id}/public-link – Créer un lien public
- GET /api/public/{token} – Accéder à une note via lien public
-
Fonctionnalités Mobile (Flutter)
-
Écrans
- Authentification (Login/Register)
- Liste des notes avec recherche et filtres
- Détail d’une note avec édition Markdown
- Création/Édition de note
- Gestion du partage (visualisation des métadonnées)
-
Stratégie Offline
- Cache local avec SQLite
- File d’opérations en attente de synchronisation
- Synchronisation en arrière-plan à la reconnexion
- Indicateurs visuels de statut de connexion
-
Contraintes Techniques
-
Sécurité
- Hashage des mots de passe avec bcrypt
- Tokens JWT avec expiration courte
- Validation des données côté serveur
- Protection contre les injections SQL
- Gestion des permissions d’accès aux notes
-
Performance
- Pagination des résultats
- Indexation des champs de recherche
- Compression des réponses API
- Cache HTTP pour les ressources statiques
-
Compatibilité
- Support navigateurs modernes (Chrome, Firefox, Safari, Edge)
- Support mobile iOS et Android
- Responsive design pour différentes tailles d’écran
-
Environnement et Déploiement
-
Développement
- IDE : IntelliJ IDEA / VS Code
- SDK : Java 17+, Flutter 3.0+
- Base de données : PostgreSQL 13+
-
Containerisation
- Docker pour chaque composant
- Docker Compose pour l’orchestration
- Images optimisées avec multi-stage builds
-
Déploiement
- Environnements : Développement, Staging, Production
- Variables d’environnement pour la configuration
- Scripts de build et déploiement
-
Livrables
-
Code Source
- API Spring Boot avec documentation Swagger/OpenAPI
- Application Flutter avec code documenté
- Scripts de déploiement et configuration Docker
-
Documentation
- Guide d’installation et configuration
- Manuel d’utilisation de l’application
- API documentation avec exemples
- Schémas architecturels et de base de données
-
Tests
- Tests unitaires et d’intégration (backend)
- Tests widget et d’intégration (frontend)
- Rapports de couverture de code
- Scénarios de test d’acceptation
-
Planning et Échéances
-
Phase 1 : Setup et Authentification (Semaine 1)
- Configuration des environnements
- Implémentation de l’authentification
- Modèles de données de base
-
Phase 2 : Gestion des Notes (Semaine 2-3)
- CRUD des notes et tags
- Interface utilisateur de base
- Système de recherche et filtres
-
Phase 3 : Partage et Synchronisation (Semaine 4)
- Fonctionnalités de partage
- Stratégie offline-first
- Synchronisation des données
-
Phase 4 : Finalisation et Tests (Semaine 5)
- Optimisations et polishing
- Tests complets et correctifs
- Documentation et déploiement
-
Critères d’Acceptation
- Authentification JWT fonctionnelle
- CRUD complet des notes avec tags
- Système de recherche et filtrage
- Partage de notes avec autres utilisateurs
- Génération de liens publics
- Fonctionnement offline avec synchronisation
- Interface utilisateur moderne et responsive
- Application containerisée avec Docker
- Documentation complète
- Tests automatisés avec couverture satisfaisante
-
Conclusion
- Ce cahier des charges définit les spécifications complètes pour le développement de l’application de gestion de notes multi-plateforme, couvrant à la fois les aspects backend et frontend ainsi que les exigences de déploiement et de documentation.