2 : Répondre aux incidents et aux demandes d'assistance et d'évolution

  • 1.2.1 Traiter des demandes concernant les services réseau et système, applicatifs

5 : Mise à disposition des utilisateurs d'un service informatique

  • 1.5.2 Déployer un service

1.6: Organiser son développement professionnel

  • 1.6.4 Développer son projet professionnel

Commande changePatternStructure

Cette commande permet de modifier la structure du fichier JSON afin d'y ajouter le support des langues fr et en pour internationaliser l'API.

php bin/console changePatternStructure

Elle ne prend aucun paramètre.


Commande text-to-speech

Cette commande génère les fichiers audio WAV à partir d'un fichier JSON.

php bin/console text-to-speech api genre langue fichier

Elle prend en paramètres :

  • L'API de text-to-speech externe à utiliser
  • Le genre de la voix : woman ou man
  • La langue : fr ou en
  • Le nom du fichier JSON

Améliorations apportées

  • Ajout d'une barre de progression pour visualiser l'avancement du traitement
  • Ajout d'un timer pour mesurer le temps d'exécution total
  • Ajout d'un bloc try/catch avec Throwable pour capturer toutes les erreurs et exceptions possibles, facilitant le débogage

Commande mergeCsv

php bin/console mergeCsv

Elle ne prend aucun paramètre.

Cette commande permet de fusionner un fichier CSV avec un fichier JSON. Elle est utilisée pour mettre à jour le fichier JSON contenant les prononciations, à partir d'un fichier CSV fourni par les développeurs de FileMaker — l'application utilisée pour créer les questions des séries de codes.

Code

#[AsCommand(
    name: "mergeCsv",
    description: "merge a csv file into pattern.json",
)]
class MergeCsvCommand extends Command
{
    public function __construct(
        private PatternService $patternService,
        private string $csvDirectoryPath,
    ) {
        parent::__construct();
    }

    protected function execute(InputInterface $input, OutputInterface $output): int
    {
        try {
            $data = $this->patternService->getJson();

            $csvFilePath = "{$this->csvDirectoryPath}/merge.csv";

            if (!file_exists(filename: $csvFilePath)) {
                $output->writeln("<error>Le fichier csv n'existe pas dans le répertoire src/resources/</error>");
                return Command::FAILURE;
            }

            $newData = $data;

            $file = fopen(filename: $csvFilePath, mode: "r");
            if ($file === false) {
                $output->writeln("<error>Impossible d'ouvrir le fichier CSV</error>");
                return Command::FAILURE;
            }

            while (($csv = fgetcsv(stream: $file)) !== false) {
                if (empty($csv[0]) || empty($csv[1])) {
                    $output->writeln("<error>erreur csv vide</error>");
                    continue;
                }
                if ($csv[0] === "word"){
                    continue;
                }
                $word = $csv[0];
                $pronunciation = $csv[1];
                if (array_key_exists(key: $word, array: $data)) {
                    $newData[$word]['fr']['exempleNomApi'] = $pronunciation;
                    $output->writeln("<info>Updated: $word </info>");
                    $this->patternService->writeJson($newData);
                } else {
                    $addWord = [
                        'word' => $word,
                        'lang' => "fr",
                        'api' => "exempleNomApi",
                        'pronunciation' => $csv[1],
                    ];
                    $this->patternService->addWord($addWord);

                    $output->writeln("<info>Add: {$word} </info>");
                }
            }
        } catch (\Throwable $e) {
            $output->writeln("<error>Une erreur est survenue : {$e->getMessage()}</error>");
            return Command::FAILURE;
        }

        return Command::SUCCESS;
    }
}

Fonctionnement

  • Récupération des données du fichier JSON via patternService->getJson()
  • Vérification de l'existence du fichier CSV dans le répertoire src/resources/
  • Lecture ligne par ligne du fichier CSV avec fgetcsv()
  • Pour chaque ligne :
    • Si le mot existe déjà dans le JSON → mise à jour de la prononciation de l'api externe pour la langue fr
    • Si le mot n'existe pas → ajout d'une nouvelle entrée pour la langue fr et l'api externe
  • Gestion des erreurs via un bloc try/catch avec Throwable