Retour aux projets

PCA - Plan de Continuité d'Activité

Application développée pour la DGFiP visant à numériser un classeur de plan de continuation d'activité avec gestion des actions et des agents, et visualisation des étapes et des statistiques.

Aperçu du projet

Le projet PCA est une application web complète développée pour la Direction Générale des Finances Publiques (DGFiP) dans le cadre de mon alternance. Cette application permet de numériser et gérer les Plans de Continuité d'Activité, qui sont des documents stratégiques essentiels pour assurer la continuité des services publics en cas de crise.

L'application permet de paramétrer les structures et acteurs, de créer séquentiellement le PCA par phases, de contrôler le déroulement par le responsable PCA, et de générer des comptes-rendus d'exécution. Elle assure une traçabilité complète du processus métier.

Technologies utilisées
Java Spring Boot PostgreSQL Docker JPA/Hibernate JUnit 5 Testcontainers Maven

Défis techniques et solutions

Optimisation algorithmique des attributions hiérarchiques

Défi : Gérer efficacement les attributions hiérarchiques avec maintien d'ordre strict, insertions en position arbitraire et navigation bidirectionnelle.

Solution : Implémentation d'une LinkedList bidirectionnelle optimisée avec trois algorithmes d'insertion spécialisés (tête, queue, milieu) et prévention des boucles infinies de chargement via des stratégies de lazy loading appropriées.

Mapping objet-relationnel complexe

Défi : Éviter la redondance et les incohérences dans les relations bidirectionnelles tout en maintenant les performances.

Solution : Utilisation de l'annotation @OneToOne(mappedBy) pour stocker une seule direction de la relation tout en permettant la navigation bidirectionnelle, réduisant l'espace de stockage et éliminant les risques d'incohérence.

Tests d'intégration fidèles à la production

Défi : Garantir que les tests d'intégration reflètent fidèlement l'environnement de production sans sacrifier la performance.

Solution : Choix de Testcontainers avec PostgreSQL plutôt que HSQLDB, création d'une classe de conteneur personnalisée, et mise en place d'une hiérarchie de classes de test pour mutualiser la configuration.

Déploiement multi-environnements

Défi : Gérer différentes configurations pour les environnements de développement, d'intégration et de production.

Solution : Mise en place de profils Maven avec surcharge conditionnelle des propriétés et configuration externalisée via fichiers properties, permettant une adaptation automatique selon l'environnement d'exécution.

Résultats obtenus

Performance

Optimisation des algorithmes avec complexité O(1) pour les opérations de base et réduction significative des temps de réponse.

Qualité

Réduction des mauvaises pratiques de 41 à 6 et maintien d'une couverture de tests élevée pour garantir la fiabilité.

Collaboration

Documentation technique complète facilitant l'adoption des nouvelles technologies et la montée en compétences de l'équipe.