Skip to content

Tadkira/Skypass

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

40 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

📱 Skypass — Android Client Application

Application mobile native d'enregistrement en ligne (Écosystème Tadkira)

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.


📋 Table des Matières

  1. Architecture & Patterns
  2. Focus Technique : Client-Side Data Fusion (Option B)
  3. Room Database (Offline-First)
  4. Aesthetics & Premium Boarding Pass Screen
  5. Démarrage & Compilation

📐 Architecture & Patterns

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.

💡 Focus Technique : Client-Side Data Fusion (Option B)

Le Problème Réseau

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.

Notre Solution : Fusion côté client

Nous avons mis en place le pattern Client-Side Fusion au sein du référentiel d'enregistrement CheckInRepository.kt :

  1. Soumission Check-in : Lors de la finalisation, l'application soumet l'enregistrement et interroge simultanément le Boarding Pass Service en ligne.
  2. Data Fusion : Le référentiel combine les informations de réservation disponibles localement (noms des passagers, détails de vol AH1234, aéroports ALG et CDG) avec le QR Code brut et le lien PDF générés par le Boarding Pass Service.
  3. Persistance : L'entité fusionnée du domaine BoardingPass est convertie et stockée localement dans la base de données Room.
  4. Instant View : L'utilisateur navigue immédiatement vers l'écran du Boarding Pass, enrichi et fonctionnel à 100%.

🗄️ Room Database (Offline-First)

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_passes stocke 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".

🎨 Aesthetics & Premium Boarding Pass Screen

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 (ALGCDG), 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.

🚀 Démarrage & Compilation

Prérequis

  • Android Studio Koala ou supérieur
  • SDK Android API 35 installé
  • JDK 17+ configuré

Démarrage rapide :

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 compileDebugKotlin

Pour déployer sur un émulateur ou appareil connecté :

./gradlew installDebug

About

Mobile airline online check-in system built with Kotlin + Jetpack Compose (Android) and NestJS (Backend). Features passport OCR, QR boarding passes, offline support, and full iOS-grade UX.

Topics

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

 
 
 

Contributors

Languages