Synchronisation
Dans un contexte de collecte, l'application Queen doit pouvoir fonctionner en étant offline. Il est donc nécessaire de pouvoir effectuer, via une action de l'utilisateur, une synchronisation pour récupérer les données localement et les mettre à jour dans l'api questionnaire.
La synchronisation pousse d'abord les données locales de l'utilisateur dans l'api, avant de récupérer les nouvelles données.
Cela assure que les données conservées sont bien celles modifiées en local par l'utilisateur.
Processus de synchronisation
- envoi de toutes les unités enquêtées stockées localement
- récupération de la liste des campagnes pour lesquelles l'utilisateur au moins une unité enquêtée qui lui est affectée
- récupération du modèle de questionnaire pour chacune de ces campagnes
- récupération, en parallèle :
- des unités enquêtées pour chacune de ces campagnes
- des nomenclatures pour chacun de ces modèles de questionnaire
- si nécessaire, phase de synchronisation de ressources externes
Synchronisation de ressources externes
Si la variable d'environnement VITE_EXTERNAL_RESOURCES_URL
est renseignée, une phase de synchronisation de ressources externes est effectuée.
Elle permet de récupérer, en cache, des ressources externes nécessaires pour des questionnaires externes, récupérées à partir de l'url spécifiée.
Récupération de nouvelles ressources
Phase de mise en cache des ressources externes nécessaires :
- récupération de la liste des questionnaires externes :
${VITE_EXTERNAL_RESOURCES_URL}/gide-questionnaires.json
Exemple :
{
"questionnaires": [
{
"id": "ms-2022",
"cacheName": "gide-cache-ms-2022-v1"
},
{
"id": "st-2024",
"cacheName": "gide-cache-gide-st-2024-v2"
}
]
}
- filtrage de cette liste pour ne conserver que les questionnaires dont l'utilisateur est concerné (questionnaires récupérés lors de l'étape 3 de la synchronisation), selon la règle suivante :
un questionnaire de la liste est conservé si son
id
est inclus dans au moins un desquestionnaireId
dont l'utilisateur est concerné (comparaison insensible à la casse) - pour chaque questionnaire conservé, mise en cache de ses ressources nécessaires
- récupération de la liste des ressources :
${VITE_EXTERNAL_RESOURCES_URL}/${questionnaire.id}/assets-manifest.json
format :[{ressource1: valeur1}, {ressource2: valeur2}, ...]
- récupération de chaque valeur des ressources, en les transformant en url :
${VITE_EXTERNAL_RESOURCES_URL}/${valeur}
- pour chaque 'url de ressources', on l'ajoute dans le cache
${questionnaire.cacheName}
si elle n'est pas encore présente
- récupération de la liste des ressources :
Suppression des ressources inutiles
Phase de suppression du cache des ressources externes qui ne sont plus nécessaires :
- filtrage de la liste des questionnaires externes (récupérée dans la phase précédente) pour ne conserver que les questionnaires dont l'utilisateur n'est pas concerné
- pour chaque questionnaire conservé, suppression du cache
${questionnaire.cacheName}
- suppression de tous les caches incluant le mot
gide
: l'idée est de supprimer les caches des questionnaires externes qui ne seraient plus dans la liste de questionnaires externes - si l'utilisateur n'est concerné par aucun questionnaire externe, on supprime le cache
cache-root-external
Gestion des erreurs
Action | Type d'erreur | Conséquence |
---|---|---|
Récupération
| format non reconnu | Arrêt de la synchronisation |
Récupération d'une unité enquêtée | 400, 403, 404, 500 | Unité non récupérée, poursuite de la synchronisation |
Envoi d'une unité enquêtée | 400, 403, 404, 500 | Unité non mise à jour, suppression de l'unité en locale (déplacée en "temp zone"), poursuite de la synchronisation |
Envoi d'une unité enquêtée en "temp zone" | 400, 403, 404, 500 | Arrêt de la synchronisation |
Récupération da la liste des questionnaires externes | 400, 403, 404, 500 | Arrêt de la synchronisation |
Récupération das ressources d'un questionnaire externe | toutes | Ressource non récupérée, poursuite de la synchronisation |
Appels Api
Campagnes
Type | Route | Description | Sécurisé par Bearer token | Exemple de réponse |
---|---|---|---|---|
GET | /api/campaigns | Récupère la liste des campagnes de l'utilisateur | oui | json {} |
Modèles de questionnaire
Type | Route | Description | Sécurisé par Bearer token | Exemple de réponse |
---|---|---|---|---|
GET | /api/questionnaire/${questionnaireId} | Récupère le modèle de questionnaire Lunatic | oui | json {} |
Unités enquêtées
Type | Route | Description | Sécurisé par Bearer token | Exemple de réponse |
---|---|---|---|---|
GET | /api/survey-unit/${surveyUnitId} | Récupère l'unité enquêtée | oui | json {} |
PUT | /api/survey-unit/${surveyUnitId} | Envoie l'unité enquêtée | oui | json {} |
Nomenclatures
Type | Route | Description | Sécurisé par Bearer token | Exemple de réponse |
---|---|---|---|---|
GET | /api/nomenclature/${nomenclatureId} | Récupère la nomenclature | oui | json {} |