Aller au contenu principal

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 des questionnaireId 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

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

ActionType d'erreurConséquence
Récupération
  • d'une campagne
  • d'un modèle de questionnaire
  • d'une unité enquêtée
  • d'une nomenclature
format non reconnuArrêt de la synchronisation
Récupération d'une unité enquêtée400, 403, 404, 500Unité non récupérée, poursuite de la synchronisation
Envoi d'une unité enquêtée400, 403, 404, 500Unité 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, 500Arrêt de la synchronisation
Récupération da la liste des questionnaires externes400, 403, 404, 500Arrêt de la synchronisation
Récupération das ressources d'un questionnaire externetoutesRessource non récupérée, poursuite de la synchronisation

Appels Api

Campagnes

TypeRouteDescriptionSécurisé par Bearer tokenExemple de réponse
GET/api/campaignsRécupère la liste des campagnes de l'utilisateurouijson {}

Modèles de questionnaire

TypeRouteDescriptionSécurisé par Bearer tokenExemple de réponse
GET/api/questionnaire/${questionnaireId}Récupère le modèle de questionnaire Lunaticouijson {}

Unités enquêtées

TypeRouteDescriptionSécurisé par Bearer tokenExemple de réponse
GET/api/survey-unit/${surveyUnitId}Récupère l'unité enquêtéeouijson {}
PUT/api/survey-unit/${surveyUnitId}Envoie l'unité enquêtéeouijson {}

Nomenclatures

TypeRouteDescriptionSécurisé par Bearer tokenExemple de réponse
GET/api/nomenclature/${nomenclatureId}Récupère la nomenclatureouijson {}