# Schémas des requêtes HTTP
## Schema commun à toutes les routes d'API
Ce schéma représente le processus de authentification et d'autorisation des requêtes HTTP à l'API du Registre de
Preuve de Covoiturage.
`ENDPOINT` correspond à la route de l'API appelée.
```mermaid
flowchart TD
CLIENT --> TOKEN{Token ?}
TOKEN -- no --> E401[401 Unauthorized]
TOKEN -- yes --> PERMS{Permissions ?}
PERMS -- no --> E403[403 Forbidden]
PERMS -- yes --> APIVER{Supported API version ?}
APIVER -- no --> E422[422 Unprocessable Entity]
APIVER -- yes --> ENDPOINT
```
### Délais pour la réception et le traitement des trajets
La réception d'un trajet par le RPC est constituée de plusieurs étapes synchrones et asynchrones :
1. 0h : date et heure de départ du trajet passager ;
2. 0h - 24h : délai pour envoyer le trajet au RPC et possibilité de mettre à jour un trajet qui est en erreur ;
3. 24h - 48h : phase de détection d'anomalie ou de fraude sur le trajet par le RPC ;
4. +48h : calcul des incitations par le RPC sur les campagnes paramétrées ;
```mermaid
sequenceDiagram
participant O as Opérateur
participant A as API
Note over O,A: 0h - 24h
O->>A: envoi du trajet
POST /journeys
A-->>O: 200 Created
O->>A: Vérification du statut
GET /journeys/{operator_journey_id}
A-->>O: 200 (trajet trouvé)
statut dans le payload
opt Modification du trajet
O->>A: PATCH /journeys/{operator_journey_id}
A-->>O: 200 trajet modifié
end
Note over O,A: 24h - 48h
A--)A: Normalisation
géographique (async)
A--)A: Détection
d'anomalie (async)
A--)A: Détection
de fraude (async)
Note over O,A: 48h+
A--)A: Calcul des incitations
sur les campagnes
paramétrées (async)
```
### Envoyer un trajet
```mermaid
flowchart TD
R[POST /journeys] --> CHECKS{checks} --> VALID{Valid ?}
VALID -- no --> E400[400 Bad Request]
VALID -- yes --> UNIQ{Unique ?}
UNIQ -- no --> E409[409 Conflict]
UNIQ -- yes --> TERMS{Respect des CGU ?}
TERMS -- no --> E422[422 Unprocessable Entity]
TERMS -- yes --> OK[201 Created]
```
### Vérifier le statut d'un trajet
```mermaid
flowchart TD
R["GET /journeys/{operator_journey_id}"] --> CHECKS{checks} --> EXIST{Exists ?}
EXIST -- no --> E404[404 Not Found]
EXIST -- yes --> OK[200 Success]
```
### Modification d'un trajet
```mermaid
flowchart TD
R["POST /journeys/{operator_journey_id}"] --> CHECKS{checks} --> VALID{Valid ?}
VALID -- no --> E400[400 Bad Request]
VALID -- yes --> OK[200 Success]
```
### Invalidation d'un trajet
```mermaid
flowchart TD
R["POST /journeys/{operator_journey_id}/cancel"] --> CHECKS{checks} --> EXIST{Exists ?}
EXIST -- no --> E404[404 Not found]
EXIST -- yes --> OK[200 Success]
```
> info
> L'invalidation d'un trajet a différents impacts en fonction du moment où elle est effectuée :
>
>- Avant le calcul des incitations : le trajet n'apparait pas dans les exports ou les appels de fonds ;
>- Après le calcul des incitations : le trajet n'apparait pas dans les exports ou les appels de fonds ;
>- Après le 6 du mois suivant\* : le trajet n'apparait pas dans les exports mais est dans les appels de fonds.
>
> _\* Les appels de fonds sont calculés le 6 de chaque mois pour le mois précédent._
```mermaid
sequenceDiagram
participant O as Opérateur
participant A as API
Note over O,A: 0h - 48h
opt Invalidation du trajet
AVANT
calcul des incitations
O->>A: POST /journeys/{operator_journey_id}/cancel
A-->>O: 200 annulation enregistrée.
Le trajet n'apparait pas dans les exports
ou les appels de fonds
end
Note over O,A: 48h - 6 du mois suivant
A--)A: Calcul des incitations
sur les campagnes
paramétrées (async)
opt Invalidation du trajet
APRÈS
calcul des incitations
O->>A: POST /journeys/{operator_journey_id}/cancel
A-->>O: 200 annulation enregistrée.
Le trajet n'apparait pas dans les exports
ou les appels de fonds
end
Note over O,A: Après le 6 du mois suivant
opt Invalidation du trajet
APRÈS
calcul des incitations
O->>A: POST /journeys/{operator_journey_id}/cancel
A-->>O: 200 annulation enregistrée.
Le trajet n'apparait pas dans les exports
mais est dans les appels de fonds
end
```
# CEE
### Enregistrer une demande
```mermaid
flowchart TD
R[POST /policies/cee] --> CHECKS{checks} --> VALID{Valid ?}
VALID -- no --> E400[400 Bad Request]
VALID -- yes --> EXISTS{Exists ?}
EXISTS -- no --> E404[404 Not Found]
EXISTS -- yes --> UNIQ{Unique ?}
UNIQ -- no --> E409[409 Conflict]
UNIQ -- yes --> OK[201 Created]
```
### Simuler une demande
```mermaid
flowchart TD
R[POST /policies/cee/simulate] --> CHECKS{checks} --> VALID{Valid ?}
VALID -- no --> E400[400 Bad Request]
VALID -- yes --> UNIQ{Unique ?}
UNIQ -- no --> E409[409 Conflict]
UNIQ -- yes --> OK[200 Success]
```
### Rechercher une demande
```mermaid
flowchart TD
R["GET /policies/cee/{uuid}"] --> CHECKS{checks} --> VALID{Valid ?}
VALID -- no --> E400[400 Bad Request]
VALID -- yes --> EXISTS{Exists ?}
EXISTS -- no --> E404[404 Not Found]
EXISTS -- yes --> OK[200 Success]
```
### Supprimer une demande
```mermaid
flowchart TD
R["DELETE /policies/cee/{uuid}"] --> CHECKS{checks} --> VALID{Valid ?}
VALID -- no --> E400[400 Bad Request]
VALID -- yes --> EXISTS{Exists ?}
EXISTS -- no --> E404[404 Not Found]
EXISTS -- yes --> OK[204 No Content]
```