Skypass est l'application mobile native en Kotlin et Jetpack Compose du projet Tadkira. Elle permet aux voyageurs d'effectuer tout leur parcours d'enregistrement depuis leur smartphone : numérisation de passeport par caméra, validation d'identité, sélection de sièges sur plan interactif 3D, déclaration de bagages, demandes spéciales et téléchargement de cartes d'embarquement hors-ligne.
- Architecture & Patterns
- Focus Technique : Client-Side Data Fusion (Option B)
- Room Database (Offline-First)
- Aesthetics & Premium Boarding Pass Screen
- Démarrage & Compilation
L'application est construite selon les principes de la Clean Architecture et du pattern de présentation MVVM (Model-View-ViewModel).
┌─────────────────────────────────────────────────────────┐
│ PRESENTATION │
│ Jetpack Compose views · ViewModels │
└────────────────────────────┬────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────┐
│ DOMAIN │
│ UseCases · Domain Models · Repository API │
└────────────────────────────┬────────────────────────────┘
▼
┌─────────────────────────────────────────────────────────┐
│ DATA │
│ DTOs · Room LocalDB (Offline) · Retrofit API client │
└─────────────────────────────────────────────────────────┘
- Séparation des préocupations : L'interface utilisateur ne communique jamais avec les DTOs réseaux ou Room ; elle manipule uniquement des entités du domaine robustes et validées.
- Injection de Dépendances : Hilt / Dagger pour l'injection propre des cas d'utilisation et dépôts.
La base de données et l'API du microservice backend boarding-pass-service sont volontairement simplifiées et ne stockent ni le numéro de vol, ni les aéroports de départ/destination, ni les noms des passagers (qui sont sous la responsabilité du flight-booking-service). Une désérialisation brute du billet réseau par le client mobile produisait des exceptions silencieuses de pointeurs nuls ou affichait une carte vide sans informations vitales pour le passager.
Nous avons mis en place le pattern Client-Side Fusion au sein du référentiel d'enregistrement CheckInRepository.kt :
- Soumission Check-in : Lors de la finalisation, l'application soumet l'enregistrement et interroge simultanément le Boarding Pass Service en ligne.
- Data Fusion : Le référentiel combine les informations de réservation disponibles localement (noms des passagers, détails de vol
AH1234, aéroportsALGetCDG) avec le QR Code brut et le lien PDF générés par le Boarding Pass Service. - Persistance : L'entité fusionnée du domaine
BoardingPassest convertie et stockée localement dans la base de données Room. - Instant View : L'utilisateur navigue immédiatement vers l'écran du Boarding Pass, enrichi et fonctionnel à 100%.
Pour pallier le manque de réseau fréquent dans les aéroports, Skypass met en oeuvre une politique Offline-First complète :
- La table
boarding_passesstocke localement le titre d'embarquement fusionné complet, indexé par le PNR. - Lors du clic sur "View Boarding Pass" depuis l'écran d'accueil ou de résultats, le système interroge d'abord Room pour un chargement instantané en 0 milliseconde, sans appel réseau obligatoire.
- Le QR code est dessiné sur l'écran à partir d'un générateur de matrice local, garantissant son affichage même en mode avion.
- Session Utilisateur & Réservations Persistées : Le profil de l'utilisateur (
UserEntity) et l'ensemble de ses réservations de vol réclamées (BookingEntity) sont conservés localement dans Room. Cela évite d'être déconnecté de force ou d'avoir un écran vide au redémarrage de l'application en mode hors-ligne. - Indicateur de Disponibilité Hors-ligne : L'écran de la carte d'embarquement détecte dynamiquement la connectivité de l'appareil. S'il utilise les données du cache local en étant connecté, il affiche un badge vert rassurant "Disponible pour consultation hors-ligne". S'il est complètement déconnecté, il affiche un badge rouge "Mode hors-ligne".
L'interface de la carte d'embarquement (BoardingPassScreen.kt) a été entièrement conçue pour offrir un effet WOW immédiat au passager :
- Design Ticket Moderne : Utilisation d'angles arrondis avec encoches semi-circulaires sur les côtés (ticket perforation) séparant les informations de vol du coupon de contrôle (boarding stub).
- Charte Graphique Soignée : En-tête rouge vibrant (
#C10E32) aux couleurs de la compagnie aérienne, contrastant avec des tons de gris doux et de blanc pur. - Visualisation Clair : Affichage en gros caractères des codes IATA (
ALG➔CDG), du numéro de siège, du numéro de vol et de la classe de cabine. - Backstack Cleaning : Le bouton de fermeture (croix) en haut à droite nettoie la pile de navigation de toutes les étapes de saisie intermédiaires du stepper et renvoie l'utilisateur directement à l'accueil de recherche, assurant une navigation intuitive.
- Android Studio Koala ou supérieur
- SDK Android API 35 installé
- JDK 17+ configuré
Pour compiler et vérifier la cohérence du code Kotlin de l'application en ligne de commande :
# Lancer la compilation des sources Kotlin
./gradlew compileDebugKotlinPour déployer sur un émulateur ou appareil connecté :
./gradlew installDebug