Couche données - ApplETS/Notre-Dame GitHub Wiki
💾 Couche Data (Données)
Vue d'Ensemble
La couche Data gère l'accès à toutes les sources de données (APIs, bases de données, cache) et les transforme en entités du domaine.
Data Layer
├── Repositories ← Gestion des données
├── Services ← Accès aux données
└── Models ← DTOs (Data Transfer Objects)
🎯 Responsabilités
✅ Abstraire l'accès aux données (Repository Pattern)
✅ Transformer les DTOs en entités métier
✅ Gérer le caching local
✅ Centraliser l'accès aux APIs
✅ Gérer les erreurs d'accès aux données
✅ Fournir une interface unique pour les données
📋 Architecture Interne
- Repositories: définissent l'interface pour accéder aux données.
- Services: implémentent l'accès concret aux ressources externes.
- API Services: accès aux APIs externes, donc SignÉTS Mobile et l'API de Babillard
- Authentication Service: authentification au SSO de l'ÉTS pour l'accès à SignÉTS mobile
- Cache Service: interface pour accéder à la cache de l'application
- Models (DTOs): représentent les données reçues des APIs.
- Exception Handling
📊 Repositories du Projet
Repositories Principaux
| Repository | Responsabilité |
|---|---|
UserRepository |
Données utilisateur et profil |
CourseRepository |
Cours et informations académiques |
CourseActivityRepository |
Horaires et activités de cours |
NewsRepository |
Actualités et événements |
GradeRepository |
Notes et résultats académiques |
SettingsRepository |
Préférences et paramètres |
AuthRepository |
Authentification et tokens |
BroadcastMessageRepository |
Messages diffusés globalement |
BaseStreamRepository
Repository de base pour l'accès aux APIs. BaseStreamRepository s'occupe des fonctions suivantes:
- Lit la cache
- Appelle l'API SignÉTS Mobile
- Gère les erreurs et le retry
- Synchronise les accès concurrents
- Notifie l'UI via un stream
💾 Caching Strategy
Stratégie de Cache
GET Request
↓
Check Cache (local)
├─ Cache hit & not expired → Return cached data
└─ Cache miss or expired → Fetch from API
Store in Cache
↓
Return to ViewModel
Types de Cache
-
Memory Cache (CacheService)
- Rapide mais volatile
- Limité en taille
-
Local Storage (SharedPreferences)
- Persistant entre sessions
- Données non sensibles
-
Secure Storage (FlutterSecureStorage)
- Sécurisé (encrypté)
- Tokens et données sensibles
✅ Checklist pour Nouveau Repository
- Interface claire et simple
- Gestion des erreurs avec exceptions métier
- Transformation DTO → Entity
- Caching quand approprié
- Logging des appels API
- Timeouts configurés
- Retry logic pour réseau instable
- Tests unitaires avec mocks
- Documentation
Services du projet
Services
├── Authentication (AuthService, MSALAuth)
├── APIs (SignetsClientService, HelloService)
├── Firebase (AnalyticsService, RemoteConfigService)
├── Local Storage (PreferencesService, CacheService)
├── Navigation (NavigationService)
└── Utils (LaunchUrlService, InAppReviewService)
🌐 SignetsClientService - API Signets
Client HTTP pour l'API Signets (données académiques). Voir la documentation de l'API (disponible uniquement pour les membres du club)
📊 Vue d'Ensemble des Services
| Service | Responsabilité | Dépend de |
|---|---|---|
| AuthService | Authentification MSAL | FlutterSecureStorage, MSALAuth |
| AnalyticsService | Suivi Firebase | FirebaseAnalytics |
| RemoteConfigService | Config distante | FirebaseRemoteConfig |
| CacheService | Cache en mémoire | Rien |
| PreferencesService | Préférences locales | SharedPreferences |
| SignetsClientService | API Signets | Dio, AuthService |
| HelloService | API Hello (News) | Dio |
| NavigationService | Navigation centralisée | Navigator |
| LaunchUrlService | Ouvrir URLs | UrlLauncher |
| InAppReviewService | Évaluation app | InAppReview |
🔌 Dépendances Clés
- Dio : Client HTTP
- Retrofit : REST API client generator
- SharedPreferences : Stockage simple
- FlutterSecureStorage : Stockage sécurisé
- Firebase : Analytics, Crashlytics, RemoteConfig
Cette page a été en partie générée avec l'aide de Claude Haiku 4.5