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

  1. Memory Cache (CacheService)

    • Rapide mais volatile
    • Limité en taille
  2. Local Storage (SharedPreferences)

    • Persistant entre sessions
    • Données non sensibles
  3. 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