Skip to content

Changed : refactor the way the imports of files is handled#32

Open
tdel wants to merge 1 commit into
novalend:mainfrom
tdel:test-update
Open

Changed : refactor the way the imports of files is handled#32
tdel wants to merge 1 commit into
novalend:mainfrom
tdel:test-update

Conversation

@tdel

@tdel tdel commented Jul 16, 2026

Copy link
Copy Markdown

Cette PR est proposé afin d'apporter une amélioration de structure au projet existant.

Le fonctionnement du projet n'a pas changé, le point d'entrée est toujours la commande.
Cependant, le fonctionnement a changé comme suit :

  • La commande appelle une classe "ImportService::import()" qui reçoit 2 paramètres :
    • le provider (ou le client qui envoi les données)
    • le chemin complet du fichier à importer
  • Cette classe ImportService dispose :
    • d'une collection de classe implémentant l'interface "ParserInterface" qui permet d'avoir un nombre infini de "parser"
    • d'un mapping "provider" => "parser" (pour le moment hardcodé)
    • d'un système de log basique mais qui permet de suivre l'avancement de chaque import

L'architecture ici présente permet ainsi d'ajouter de nouveaux "parser", permettant non seulement d'implémenter des fichiers "custom" de clients mais également de disposer de plusieurs "versions", notamment lorsqu'on souhaite faire des optimisations (exemple avec le parser JSON qui a été décliné en 3 versions ici).

Un test unitaire assez simple a été effectué pour le parser JSON en v3, démontrant un cas de test relativement basique.

Points à améliorer pour plus tard :

  • Améliorer les logs afin de mieux comprendre ce qu'il se passe en détail
  • Mieux intégrer la notion de "provider" (ou de client) qui n'était pas présente dans le projet
  • Voir si il n'est pas mieux de "batcher" les UPDATE en SQL brut plutôt que via l'ORM
  • Mieux gérer les fichiers qui n'ont pas été totalement "updaté"
  • Avoir une sortie de la commande qui liste les fichiers correctement intégré et ceux qui ne l'ont pas du tout été ou partiellement.
  • Faire attention à la concurrence si la commande est appelée plusieurs fois en même temps
  • Supprimer la classe "InvoiceParser" qui n'est plus utilisée (mais laissé pour le moment)
  • Regarder les consommations de mémoire en rapport avec les tailles de fichiers recevables ainsi que la disponibilité mémoire + CPU des serveurs en production

Points à noter :

  • Exercice non fait avec l'IA, entièrement avec mes connaissances et un temps relativement réduit (2h de réflexion sur papier + 1h de code environ)
  • Je n'ai pas mis délibérément le projet à jour car c'était hors-scope. Il n'était pas dit d'ailleurs que les nouvelles versions de PHP soient disponible en production, je suis resté avec PHP 8.2 tel qu'il a été trouvé dans l'image docker. Je n'ai pas non plus mis à jour Symfony, ce dernier se trouvant dans une version LTS plutôt confortable à l'heure actuelle.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

1 participant