---
# System prepended metadata

title: Document d'architecture Tchatche+

---

# Document d'architecture Tchatche+

# Architecture #

## Clean architecture ##

Le projet emploie une architecture inspirée de hexagonale / clean, afin de bien
découper le projet en unités testables et facilement maintenables. Le projet est
centré autour d'entités (`core/Models.kt`) et use cases qui implémentent la
logique d'interaction haut niveau de l'utilisateur avec les données.

Ces services interagissent avec le reste du système (repository d'accès aux
données, accès au stockage local, ...) par le biais d'interfaces définies
dans (`core/Repositories.kt`) et fournissent indirectement des informations à la
couche UI par le biais de coroutines ou de Flow.

Cette architecture est représentée par le diagramme suivant :

![Architecture](images/architecture.png)

## Code multiplateforme ##

Le coeur de l'application est mutualisé entre les plates-formes à l'aide d'un
projet Kotlin Multiplatform.
Les parties mutualisées concernent :
  
  * Modèle de données métiers
  * Use-cases métier (le coeur de la logique métier des différents écrans)
  * Modèle de données transport
  * Implémentation du client Http et des repositories
  * Modèles de vue (logique de présentation des différents écrans)
  
Le code non mutualisé correspond majoritairement au code des interfaces
graphiques et de la navigation, qui sont spécifiques à la plateforme.

## Structure du projet ##

``` 
+ app      Le projet Kotlin Multiplatform
|-+ src 
  |-+ commonMain/...       Code partagé entre les plateformes
  |  |-+ core               Code métier de l'application
  |  |-+ app                Modèles de vues de l'application
  |  |-+ repositories       Implémentation du client web et des repositories
  |  |-+ device             Implémentation des repositories utilisant le stockage local
  |  |-+ modules            Cablage des dépendances
  |  |-+ config             Service de configuration
  |  |-+ mocks              Implémentation bouchonnées des repositories
  |-+ main                 Code spécifique Android
  |-+ iosMain              Code Kotlin spécifique Android
+ iosApp   Le projet Xcode de l'application iOS
```

# Gestion de l'asynchronisme

Kotlin Multiplatform permet de gérer l'asynchronisme de manière simplifié et
structurée à l'aide de coroutines. Les coroutines sont des threads légers qui
permettent notamment de réaliser les opérations réseau sans bloquer le thread
principal. Les coroutines sont plus légères en ressource que les threads et
permettent une programmation plus structurée avec les principes de scope.

https://kotlinlang.org/docs/reference/coroutines/coroutines-guide.html

Certaines parties de l'app utilise Flow pour gérer de manière réactive les
changements de données et le rafraichissement de l'écran. 

https://kotlinlang.org/docs/reference/coroutines/flow.html


# Gitlab #

Nous avons utilisé un repository gitlab privé pour héberger les sources du projet, construire les binaires à chaque commit ainsi que lister les taches à faire. 

L'adresse de se repository est : https://gitlab.com/monkeypatch/mobile/tchatche-v2/

Nous avons lors de la première livraison donné un accés à Gilbert. Si vous souhaitez avoir d'autres accés, il suffit de nous le demander. 


## priorités ##
Nous avons classé les issues/features avec 3 priorités: 

+ P1 : Prirorité bloquante. Bloque la livraison et empeche l'application de fonctionner correctement par un crash qui impacte la majorité des utilisateurs ou une fonctionnalité qui n'est pas accessible.  
+ P2 : Priorité importante. N'empeche pas l'application de fonctionner mais entraine une gène importante pour l'utilisateur
+ P3 : Priorité peu importante. Amélioration souhaitable mais pas indispensable à l'utilisation de l'application. 

## Milestone/versions ##

Nous avons utilisé la convention souvent utilisé lors des projets de librairies android. 
    
    N1.N2.N3-Branch

N1: version majeure
N2: version intermédiaire, ajout de fonctionnalité
N3: version de patch, correction de bugs
Branch : alpha/beta/release

# Livraison  Tchatche+ 1.0.0-beta01  #

Liste des bugs corrigés. 


![](https://i.imgur.com/xOui37m.png)


