# Contexte
Poplee Formation et Poplee Entretien sont 2 logiciels maintenu et developpés par 2 équipes separés.
Poplee Entretien va pouvoir se connecter à Poplee Formation pour remonter (et dans un futur proche manipuler) des demandes de formations dans le contexte d'une etrentien.
Pour plus d'infos :
- https://www.notion.so/Int-gration-PEnt-PF-Design-Doc-b2aa75b59fe04b118dc2118426e58273
- https://hackmd.io/RG8AZ6H_ThqZbN4gld0xNw?view
# Problème
Garantir à Poplee Entretien des APIs stables dans le temps (aucun breaking change dans le payload).
Poplee Formation peut evoluer avec souplesse sans se soucier des intégrations (pas trop).
# Design
```plantuml
@startuml
hide circle
skinparam class {
BackgroundColor White
BorderColor Black
ArrowColor Black
}
cloud "<b>Poplee Formation WS</b>" as LTS {
component "training-demands-v1-web" as LtsWeb #pink
component "training-demands-web" as CanaryWeb #lightgreen
component "training-demands-application" as CanaryApplication #lightgreen
component "training-demands-repository" as CanaryRepository #lightgreen
component "training-demands-domain" as CanaryDomain #lightgreen
component "training-demands-acl" as CanaryAcl #pink
}
actor "Poplee Entretien / Le monde\n(usage externe)" as PENT
actor "Poplee Formation\n(usage interne)" as FORM
card "À implementer" #pink
card "Implementé" #lightgreen
PENT --> LtsWeb : "GET /api/v1/training-demands"
FORM --> CanaryWeb : "GET /api/training-demands"
CanaryWeb --> CanaryApplication
CanaryApplication --> CanaryDomain
CanaryApplication --> CanaryRepository
CanaryRepository --> CanaryDomain
CanaryAcl -> CanaryApplication
LtsWeb --> CanaryAcl
@enduml
```
# CI/CD
Ce qui se passe pendant le build du job jenkins
## S'il n'y a pas des breaking changes des api.
```plantuml
@startuml
hide circle
skinparam class {
BackgroundColor White
BorderColor Black
ArrowColor Black
}
skinparam actorStyle awesome
actor Jenkins as Jenkins
participant "Poplee Formation" as FORM
participant "OpenApi LTS v1" as OPENAPIV1
Jenkins -> FORM : Build
Activate FORM
FORM -> FORM : Generate OPEN_API_temp.yaml
FORM -> OPENAPIV1 : Get OPEN_API_V1
FORM -> FORM : OpenApiDiff(temp,V1) == 0 build ok
@enduml
```
## S'il y a des breaking changes des api.
```plantuml
@startuml
hide circle
skinparam class {
BackgroundColor White
BorderColor Black
ArrowColor Black
}
skinparam actorStyle awesome
actor Jenkins as Jenkins
participant "Poplee Formation" as FORM
participant "OpenApi LTS v1" as OPENAPIV1
Jenkins -> FORM : Build
Activate FORM
FORM -> FORM : Generate OPEN_API_temp.yaml
FORM -> OPENAPIV1 : Get OPEN_API_V1
FORM -> FORM : IF OpenApiDiff(temp,V1) > 0 build ko
@enduml
```
# Lotissements
- [x] lot 1 : Implementation du token applicatif
- [ ] lot 2 : Implementation de l'endpoint /api/v1/training-demands
- [ ] lot 3 : Ajout des tests automatisés pour empecher les breaking changes de la version LTS
# Roadmap
## Lot 1
- [x] Terminé
## Lot 2
Disponible fin septembre
Le lot 2 est nécessaire pour qu'entretien soit autonome dans le développement
## Lot 3
Livraison prévue : 15 octobre
Le lot 3 doit etre disponible avant décembre