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.