migrations/Version20250617123051.php line 1

Open in your IDE?
  1. <?php
  2. declare(strict_types=1);
  3. namespace DoctrineMigrations;
  4. use Doctrine\DBAL\Schema\Schema;
  5. use Doctrine\Migrations\AbstractMigration;
  6. use Symfony\Component\Uid\Uuid;
  7. /**
  8.  * Auto-generated Migration: Please modify to your needs!
  9.  */
  10. final class Version20250617123051 extends AbstractMigration
  11. {
  12.     public function getDescription(): string
  13.     {
  14.         return 'Ajout des academies Ecom et Digital avec leurs contenus respectifs';
  15.     }
  16.     public function up(Schema $schema): void
  17.     {
  18.         $this->addSql("SET @educator_id = (SELECT `id` from `app_user` WHERE `email` = 'mathieu.roccia@futures-infinity.com');");
  19.         $this->addSql("SET @digital_feature_type_id = (SELECT id FROM app_feature_type WHERE name = 'digital');");
  20.         $this->addSql("SET @digital_feature_id = (SELECT id FROM app_feature WHERE feature_type_id = @digital_feature_type_id);");
  21.         $this->addSql("DELETE FROM app_media_content WHERE academy_category_id IN (SELECT id FROM app_academy_category WHERE academy_sub_chapter_id IN (SELECT id FROM app_academy_sub_chapter WHERE academy_chapter_id IN (SELECT id FROM app_academy_chapter WHERE academy_id IN (SELECT id FROM app_academy WHERE feature_id = @digital_feature_id))));");
  22.         $this->addSql("DELETE FROM app_academy_category WHERE academy_sub_chapter_id IN (SELECT id FROM app_academy_sub_chapter WHERE academy_chapter_id IN (SELECT id FROM app_academy_chapter WHERE academy_id IN (SELECT id FROM app_academy WHERE feature_id = @digital_feature_id)));");
  23.         $this->addSql("DELETE FROM app_academy_sub_chapter WHERE academy_chapter_id IN (SELECT id FROM app_academy_chapter WHERE academy_id IN (SELECT id FROM app_academy WHERE feature_id = @digital_feature_id));");
  24.         $this->addSql("DELETE FROM app_academy_chapter WHERE academy_id IN (SELECT id FROM app_academy WHERE feature_id = @digital_feature_id);");
  25.         $this->addSql("DELETE FROM app_academy WHERE feature_id = @digital_feature_id;");
  26.         $this->addSql("SET @ecom_feature_type_id = (SELECT `id` FROM `app_feature_type` WHERE `name` = 'ecom');");
  27.         $this->addSql("SET @ecom_feature_id = (SELECT `id` FROM `app_feature` WHERE `feature_type_id` = @ecom_feature_type_id);");
  28.         $this->addSql("DELETE FROM app_media_content WHERE academy_category_id IN (SELECT id FROM app_academy_category WHERE academy_sub_chapter_id IN (SELECT id FROM app_academy_sub_chapter WHERE academy_chapter_id IN (SELECT id FROM app_academy_chapter WHERE academy_id IN (SELECT id FROM app_academy WHERE feature_id = @ecom_feature_id))));");
  29.         $this->addSql("DELETE FROM app_academy_category WHERE academy_sub_chapter_id IN (SELECT id FROM app_academy_sub_chapter WHERE academy_chapter_id IN (SELECT id FROM app_academy_chapter WHERE academy_id IN (SELECT id FROM app_academy WHERE feature_id = @ecom_feature_id)));");
  30.         $this->addSql("DELETE FROM app_academy_sub_chapter WHERE academy_chapter_id IN (SELECT id FROM app_academy_chapter WHERE academy_id IN (SELECT id FROM app_academy WHERE feature_id = @ecom_feature_id));");
  31.         $this->addSql("DELETE FROM app_academy_chapter WHERE academy_id IN (SELECT id FROM app_academy WHERE feature_id = @ecom_feature_id);");
  32.         $this->addSql("DELETE FROM app_academy WHERE feature_id = @ecom_feature_id;");
  33.         $ecomAcademyContent $this->getEcomAcademyContent();
  34.         $this->generateAcademySql('ecom''@ecom_feature_id'$ecomAcademyContent);
  35.         $digitalAcademyContent $this->getDigitalAcademyContent();
  36.         $this->generateAcademySql('digital''@digital_feature_id'$digitalAcademyContent);
  37.         $this->addSql("SET @ecom_feature_type_id = NULL;");
  38.         $this->addSql("SET @ecom_feature_id = NULL;");
  39.     }
  40.     public function down(Schema $schema): void
  41.     {
  42.     }
  43.     /**
  44.      * @param string $type
  45.      * @param string $featureIdVar
  46.      * @param array $content
  47.      * @return void
  48.      */
  49.     private function generateAcademySql(string $typestring $featureIdVar, array $content): void
  50.     {
  51.         $academyTitles = [
  52.             'ecom' => [
  53.                 'fr' => 'Ecom Academy',
  54.                 'en' => 'Ecom Academy',
  55.                 'es' => 'Ecom Academy',
  56.                 'ar' => 'Ecom Academy',
  57.             ],
  58.             'digital' => [
  59.                 'fr' => 'Digital Academy',
  60.                 'en' => 'Digital Academy',
  61.                 'es' => 'Digital Academy',
  62.                 'ar' => 'Digital Academy',
  63.             ]
  64.         ];
  65.         $languages = ['fr''en''es''ar'];
  66.         foreach ($languages as $lang) {
  67.             $academyGuid Uuid::v6()->jsonSerialize();
  68.             $academyTitle $this->quote($academyTitles[$type][$lang]);
  69.             $this->addSql("INSERT INTO `app_academy` (`feature_id`, `title`, `description`, `is_enabled`, `language`, `educator_id`, `guid`) VALUES ({$featureIdVar}{$academyTitle}, '', 1, '{$lang}', @educator_id, '{$academyGuid}')");
  70.             $this->addSql("SET @academy_id = LAST_INSERT_ID();");
  71.             $this->addSql("INSERT INTO `app_academy_chapter` (`academy_id`, `title`, `description`, `position`, `is_enabled`) VALUES (@academy_id, NULL, '', 1, 1)");
  72.             $this->addSql("SET @chapter_id = LAST_INSERT_ID();");
  73.             foreach ($content['modules'] as $moduleIndex => $module) {
  74.                 $subChapterPosition $moduleIndex 1;
  75.                 $subChapterTitle $this->quote($module['title'][$lang] ?? '');
  76.                 $subChapterDesc $this->quote($module['description'][$lang] ?? '');
  77.                 $this->addSql("INSERT INTO `app_academy_sub_chapter` (`academy_chapter_id`, `title`, `description`, `position`, `is_enabled`) VALUES (@chapter_id, {$subChapterTitle}{$subChapterDesc}{$subChapterPosition}, 1)");
  78.                 $this->addSql("SET @sub_chapter_id = LAST_INSERT_ID();");
  79.                 $categoryPosition 1;
  80.                 $categoryTitle $this->quote($module['categoryTitle'][$lang] ?? '');
  81.                 $this->addSql("INSERT INTO `app_academy_category` (`academy_sub_chapter_id`, `title`, `description`, `position`, `is_enabled`) VALUES (@sub_chapter_id, {$categoryTitle}, '', {$categoryPosition}, 1)");
  82.                 $this->addSql("SET @category_id = LAST_INSERT_ID();");
  83.                 foreach ($module['videos'] as $videoIndex => $video) {
  84.                     $mediaGuid Uuid::v6()->jsonSerialize();
  85.                     $mediaPosition $videoIndex 1;
  86.                     $mediaTitle $this->quote($video['title'][$lang] ?? '');
  87.                     $mediaDesc $this->quote($video['description'][$lang] ?? '');
  88.                     $link $this->quote($video['vimeoLink']);
  89.                     $thumbnail 'NULL';
  90.                     $duration $video['duration'] ?? 0;
  91.                     $isRequired 'NULL' === $link 0;
  92.                     $this->addSql("INSERT INTO `app_media_content` (`academy_category_id`, `guid`, `position`, `title`, `description`, `is_enabled`, `type`, `link`, `duration`, `thumbnail`, `is_required`) VALUES (@category_id, '{$mediaGuid}', {$mediaPosition}{$mediaTitle}{$mediaDesc}, 1, 'media_content_video', {$link}{$duration}{$thumbnail}{$isRequired})");
  93.                 }
  94.             }
  95.         }
  96.     }
  97.     /**
  98.      * @return array[]
  99.      */
  100.     private function getEcomAcademyContent(): array
  101.     {
  102.         return [
  103.             'modules' => [
  104.                 [
  105.                     'title' => ['fr' => 'MODULE 1'],
  106.                     'categoryTitle' => ['fr' => 'Mindset & Bases de l’e-commerce'],
  107.                     'description' => ['fr' => ''],
  108.                     'videos' => [
  109.                         ['title' => ['fr' => '1.0 – Introduction Module 1'], 'vimeoLink' => null'description' => ['fr' => 'Ce module d’introduction va t’aider à bien te positionner mentalement avant de te lancer. On pose les bases fondamentales : état d’esprit, engagement et vision long terme.']],
  110.                         ['title' => ['fr' => '1.1 – Bienvenue dans cette aventure e-commerce'], 'vimeoLink' => 'https://player.vimeo.com/video/1093844435''description' => ['fr' => 'Un message de bienvenue pour te montrer ce que tu peux accomplir avec cette formation. Je t’explique le déroulé global et ce que tu peux attendre des prochaines étapes.']],
  111.                         ['title' => ['fr' => '1.2 – Le bon mindset pour durer dans ce business'], 'vimeoLink' => 'https://player.vimeo.com/video/1093823378''description' => ['fr' => 'Tu vas découvrir pourquoi l’état d’esprit est souvent plus important que les outils. On parle de discipline, de résilience, et de mentalité à adopter pour durer dans l’e-commerce.']],
  112.                         ['title' => ['fr' => '1.3 – Les modèles qui marchent en 2025 (et ceux à éviter)'], 'vimeoLink' => 'https://player.vimeo.com/video/1093823693''description' => ['fr' => 'Le monde du e-commerce évolue vite. Dans cette vidéo, je t’explique les modèles qui fonctionnent aujourd’hui, ceux à éviter, et comment faire les bons choix dès le départ.']],
  113.                         ['title' => ['fr' => '1.4 – Dropshipping, Amazon, Marque : choisir sa voie'], 'vimeoLink' => 'https://player.vimeo.com/video/1093824031''description' => ['fr' => 'Tu découvriras les grandes différences entre ces trois approches. En fonction de ton budget, ton temps et tes objectifs, tu verras quel modèle te correspond le mieux.']],
  114.                         ['title' => ['fr' => '1.5 – Les outils essentiels pour démarrer sereinement'], 'vimeoLink' => 'https://player.vimeo.com/video/1093823054''description' => ['fr' => 'Tu n’as pas besoin de mille logiciels pour réussir. Je te montre les outils simples, efficaces et souvent gratuits pour bien démarrer ton business sans stress.']],
  115.                     ]
  116.                 ],
  117.                 [
  118.                     'title' => ['fr' => 'MODULE 2'],
  119.                     'categoryTitle' => ['fr' => 'Trouver un produit gagnant'],
  120.                     'description' => ['fr' => ''],
  121.                     'videos' => [
  122.                         ['title' => ['fr' => '2.0 – Introduction Module 2'], 'vimeoLink' => 'https://player.vimeo.com/video/1093828691''description' => ['fr' => 'Un bon produit est le pilier de ton succès. Ce module va t’apprendre à repérer, analyser et valider des produits à fort potentiel avant même de dépenser 1€ en pub.']],
  123.                         ['title' => ['fr' => '2.1 – Qu’est-ce qu’un produit gagnant en 2025 ?'], 'vimeoLink' => 'https://player.vimeo.com/video/1093831337''description' => ['fr' => 'Tu découvriras les critères d’un vrai produit gagnant : marge, effet wow, usage simple, viralité… avec des exemples concrets pour t’aider à mieux repérer ces pépites.']],
  124.                         ['title' => ['fr' => '2.2 – Comprendre la psychologie d’achat'], 'vimeoLink' => 'https://player.vimeo.com/video/1093833686''description' => ['fr' => 'Pourquoi les gens achètent ? On plonge dans la tête des clients pour comprendre ce qui déclenche une décision d’achat et comment s’en servir pour mieux vendre.']],
  125.                         ['title' => ['fr' => '2.3 – Où et comment chercher les bons produits ?'], 'vimeoLink' => 'https://player.vimeo.com/video/1093830138''description' => ['fr' => 'Je te partage les meilleures stratégies et outils (gratuits et payants) pour trouver des produits avec un fort potentiel, que ce soit sur TikTok, Amazon, AliExpress ou ailleurs.']],
  126.                         ['title' => ['fr' => '2.4 – Analyser la concurrence intelligemment'], 'vimeoLink' => 'https://player.vimeo.com/video/1093833529''description' => ['fr' => 'Un bon produit mal positionné face à la concurrence peut échouer. Je t’apprends à analyser les autres boutiques et à identifier les opportunités sur ton marché.']],
  127.                         ['title' => ['fr' => '2.5 – Valider un produit avant d’investir'], 'vimeoLink' => 'https://player.vimeo.com/video/1093831916''description' => ['fr' => 'Avant de lancer un produit, il faut le tester. Tu découvriras une méthode pas à pas pour valider rapidement ton idée sans perdre d’argent ni de temps.']],
  128.                     ]
  129.                 ],
  130.                 [
  131.                     'title' => ['fr' => 'MODULE 3'],
  132.                     'categoryTitle' => ['fr' => 'Créer ta boutique Shopify de A à Z'],
  133.                     'description' => ['fr' => ''],
  134.                     'videos' => [
  135.                         ['title' => ['fr' => '3.0 – Introduction Module 3'], 'vimeoLink' => 'https://player.vimeo.com/video/1093837219''description' => ['fr' => 'Dans cette introduction, tu vas comprendre les enjeux de ce module essentiel : créer une boutique professionnelle, fiable et prête à encaisser des ventes dès aujourd’hui.']],
  136.                         ['title' => ['fr' => '3.1 – Créer ton compte Shopify pas à pas'], 'vimeoLink' => 'https://player.vimeo.com/video/1093836851''description' => ['fr' => 'Une démonstration complète et simple pour ouvrir ton compte Shopify, configurer ton interface, et t’assurer que tout est bien en place pour commencer sereinement.']],
  137.                         ['title' => ['fr' => '3.2 – Choisir un thème adapté à la conversion'], 'vimeoLink' => 'https://player.vimeo.com/video/1093836768''description' => ['fr' => 'Tu découvriras comment sélectionner un thème visuel optimisé pour vendre, et quels critères prendre en compte pour améliorer l’expérience utilisateur sur ta boutique.']],
  138.                         ['title' => ['fr' => '3.3 – Créer ta page d’accueil et ton menu'], 'vimeoLink' => 'https://player.vimeo.com/video/1093836663''description' => ['fr' => 'Construis une page d’accueil claire et professionnelle, avec un menu bien structuré pour guider tes visiteurs et les orienter vers l’achat en quelques clics.']],
  139.                         ['title' => ['fr' => '3.4 – Mise en place de la page d\'accueil'], 'vimeoLink' => 'https://player.vimeo.com/video/1093837059''description' => ['fr' => 'Ici, on passe à l’action : ajout de sections, mise en page, visuels, appels à l’action. Tu verras comment rendre ta page d’accueil impactante sans compétences techniques.']],
  140.                         ['title' => ['fr' => '3.5 – Créer une fiche produit de qualité'], 'vimeoLink' => 'https://player.vimeo.com/video/1093836960''description' => ['fr' => 'Une fiche produit bien rédigée peut doubler ton taux de conversion. Je t’explique comment la construire pour rassurer, convaincre et déclencher l’achat.']],
  141.                         ['title' => ['fr' => '3.6 – Paramétrer les paiements, livraisons et mentions légales'], 'vimeoLink' => 'https://player.vimeo.com/video/1093837121''description' => ['fr' => 'Configure les moyens de paiement, les zones de livraison, les frais, et ajoute les éléments juridiques obligatoires pour être en conformité dès le début.']],
  142.                     ]
  143.                 ],
  144.                 [
  145.                     'title' => ['fr' => 'MODULE 4'],
  146.                     'categoryTitle' => ['fr' => 'Finir ta boutique & créer ton offre'],
  147.                     'description' => ['fr' => ''],
  148.                     'videos' => [
  149.                         ['title' => ['fr' => '4.0 – Introduction Module 4'], 'vimeoLink' => 'https://player.vimeo.com/video/1093840118''description' => ['fr' => 'Ce module finalise la construction de ta boutique. Tu vas découvrir les éléments indispensables pour qu’elle soit 100% opérationnelle et prête à accueillir tes premiers clients.']],
  150.                         ['title' => ['fr' => '4.1 – CONFIGURER LES MOYENS DE PAIEMENT ET LA LIVRAISON'], 'vimeoLink' => 'https://player.vimeo.com/video/1093837690''description' => ['fr' => 'Une étape technique mais essentielle : on te montre comment t’assurer que ton site peut encaisser les paiements et livrer tes clients en toute sécurité.']],
  151.                         ['title' => ['fr' => '4.2 – SÉCURISER TA BOUTIQUE (MENTIONS LÉGALES, CGV, POLITIQUE DE RETOUR)'], 'vimeoLink' => 'https://player.vimeo.com/video/1093837803''description' => ['fr' => 'Tu apprendras à intégrer toutes les pages juridiques obligatoires pour protéger ton activité et rassurer les visiteurs (et les autorités).']],
  152.                         ['title' => ['fr' => '4.3 – CONNECTER TON NOM DE DOMAINE PERSONNALISÉ'], 'vimeoLink' => 'https://player.vimeo.com/video/1093837583''description' => ['fr' => 'Pour avoir une boutique sérieuse et crédible, tu dois connecter ton propre nom de domaine. Ce tuto te guide étape par étape.']],
  153.                         ['title' => ['fr' => '4.5 – AJOUTER DES APPELS A L\'ACTION SUR TOUTE TA BOUTIQUE'], 'vimeoLink' => 'https://player.vimeo.com/video/1093837454''description' => ['fr' => 'Optimise toutes les pages de ton site avec des CTA efficaces pour guider ton client vers l’achat sans distraction.']],
  154.                         ['title' => ['fr' => '4.5 – CREER TON OFFRE'], 'vimeoLink' => 'https://player.vimeo.com/video/1093837912''description' => ['fr' => 'Créer une bonne offre, ce n’est pas juste afficher un prix. Je te montre comment construire une proposition de valeur qui donne envie d’acheter maintenant.']],
  155.                         ['title' => ['fr' => '4.6 - Relier ton produit a ton fournisseur (DSers)'], 'vimeoLink' => null'description' => ['fr' => 'Une fois ta boutique prête, tu dois automatiser les commandes. On configure DSers pour que ton produit soit connecté à ton fournisseur en un clic.']],
  156.                     ]
  157.                 ],
  158.                 [
  159.                     'title' => ['fr' => 'MODULE 5'],
  160.                     'categoryTitle' => ['fr' => 'Créer tes visuels & ton contenu'],
  161.                     'description' => ['fr' => ''],
  162.                     'videos' => [
  163.                         ['title' => ['fr' => '5.0 – Introduction Module 5'], 'vimeoLink' => null'description' => ['fr' => 'Tu vas comprendre pourquoi les visuels sont aussi importants que le produit lui-même. Ce module t’aidera à rendre ton site et tes publicités beaucoup plus attrayants.']],
  164.                         ['title' => ['fr' => '5.1 – Les fondamentaux d’un bon visuel e-commerce'], 'vimeoLink' => null'description' => ['fr' => 'Tu découvriras les bases indispensables pour concevoir des visuels qui attirent l’œil, inspirent confiance et déclenchent l’envie d’acheter, même sans être designer.']],
  165.                         ['title' => ['fr' => '5.2 – Créer des visuels pros avec Canva (ou IA)'], 'vimeoLink' => 'https://player.vimeo.com/video/1094451469''description' => ['fr' => 'On passe à la pratique : je te montre comment utiliser Canva (et l’IA si tu veux aller plus loin) pour créer facilement des visuels percutants.']],
  166.                         ['title' => ['fr' => '5.3 – Construire ta galerie produit comme un pro'], 'vimeoLink' => null'description' => ['fr' => 'Une galerie bien pensée augmente la conversion. On voit ensemble comment présenter ton produit sous tous les angles pour rassurer ton client.']],
  167.                         ['title' => ['fr' => '5.4 – Construire ton identité visuelle e-com complete'], 'vimeoLink' => null'description' => ['fr' => 'Ce n’est pas juste une question de logo. Tu vas apprendre à créer une identité cohérente, professionnelle et mémorable sur tous tes supports.']],
  168.                     ]
  169.                 ],
  170.                 [
  171.                     'title' => ['fr' => 'MODULE 6'],
  172.                     'categoryTitle' => ['fr' => 'Facebook Ads (et TikTok Ads) pour l’e-commerce'],
  173.                     'description' => ['fr' => ''],
  174.                     'videos' => [
  175.                         ['title' => ['fr' => '6.0 – Introduction Module 6'], 'vimeoLink' => null'description' => ['fr' => 'Ce module est dédié à la publicité payante. Tu vas apprendre à créer tes premières campagnes Facebook (et TikTok) de A à Z, même si tu n’as jamais fait de pub.']],
  176.                         ['title' => ['fr' => '6.1 – Comprendre les bases de la publicité en ligne'], 'vimeoLink' => 'https://player.vimeo.com/video/1094452641''description' => ['fr' => 'Avant de lancer ta première pub, il est essentiel de comprendre comment fonctionnent les plateformes, les audiences, les algorithmes et le tracking.']],
  177.                         ['title' => ['fr' => '6.2 – Créer ton Business Manager et ton compte pub'], 'vimeoLink' => 'https://player.vimeo.com/video/1094452779''description' => ['fr' => 'Un tutoriel complet pour tout configurer proprement avec Meta : Business Manager, compte pub, page pro et accès.']],
  178.                         ['title' => ['fr' => '6.3 – Installer ton pixel Meta et connecter Shopify'], 'vimeoLink' => 'https://player.vimeo.com/video/1094452716''description' => ['fr' => 'Le pixel est indispensable pour suivre les résultats de ta boutique. Tu verras comment l’installer et t’assurer qu’il remonte bien les données.']],
  179.                         ['title' => ['fr' => '6.4 – Créer ta première campagne de test'], 'vimeoLink' => 'https://player.vimeo.com/video/1094452529''description' => ['fr' => 'Je t’accompagne pas à pas pour créer ta première campagne, choisir les bons paramètres et tester efficacement ton produit.']],
  180.                         ['title' => ['fr' => '6.5 – Lire et comprendre les résultats de campagne'], 'vimeoLink' => null'description' => ['fr' => 'Tu apprendras à interpréter les données de ton Ads Manager pour savoir ce qui fonctionne, ce qui doit être optimisé et où investir ton budget.']],
  181.                     ]
  182.                 ],
  183.                 [
  184.                     'title' => ['fr' => 'MODULE 7'],
  185.                     'categoryTitle' => ['fr' => 'Optimisation, Conversion & Relance'],
  186.                     'description' => ['fr' => ''],
  187.                     'videos' => [
  188.                         ['title' => ['fr' => '7.0 – Introduction Module 7'], 'vimeoLink' => null'description' => ['fr' => 'Ton site est prêt, tes pubs tournent : maintenant on optimise. Ce module t’apprend à transformer plus de visiteurs en clients grâce à des optimisations simples.']],
  189.                         ['title' => ['fr' => '7.1 – Améliorer les taux de conversion de ta boutique'], 'vimeoLink' => 'https://player.vimeo.com/video/1094453831''description' => ['fr' => 'On passe en revue tous les leviers : confiance, urgences, rassurance, structure des pages. Objectif : augmenter ton taux de conversion.']],
  190.                         ['title' => ['fr' => '7.2 – Mettre en place une séquence e-mail & des relances panier'], 'vimeoLink' => 'https://player.vimeo.com/video/1094453725''description' => ['fr' => 'Automatise ton marketing et récupère des ventes grâce aux relances paniers et emails de suivi bien écrits.']],
  191.                         ['title' => ['fr' => '7.3 – Les apps indispensables pour Shopify'], 'vimeoLink' => null'description' => ['fr' => 'Découvre les meilleures applications (gratuites ou payantes) à ajouter à ta boutique pour améliorer ton tunnel de vente, ton service client, et plus encore.']],
  192.                         ['title' => ['fr' => '7.4 – Gérer les avis clients et booster le bouche-à-oreille'], 'vimeoLink' => 'https://player.vimeo.com/video/1094453612''description' => ['fr' => 'Les avis sont puissants. Tu vas apprendre à les collecter, les mettre en avant, et transformer la preuve sociale en ventes.']],
  193.                     ]
  194.                 ],
  195.                 [
  196.                     'title' => ['fr' => 'MODULE 8'],
  197.                     'categoryTitle' => ['fr' => 'SYSTÈMES & AUTOMATISATION POUR L’E-COMMERCE'],
  198.                     'description' => ['fr' => ''],
  199.                     'videos' => [
  200.                         ['title' => ['fr' => '8.0 – Introduction Module 8'], 'vimeoLink' => null'description' => ['fr' => 'Tu veux un business qui tourne sans toi ? Ce module t’aide à poser les bases d’une organisation claire, efficace et scalable.']],
  201.                         ['title' => ['fr' => '8.1 – Organiser ta journée & ton business e-com comme un vrai CEO'], 'vimeoLink' => null'description' => ['fr' => 'Tu découvriras comment structurer tes journées et tes priorités comme un vrai chef d’entreprise pour ne plus te disperser.']],
  202.                         ['title' => ['fr' => '8.2 – Créer une routine hebdomadaire de gestion e-commerce'], 'vimeoLink' => null'description' => ['fr' => 'On met en place une méthode simple pour suivre tes résultats, optimiser ta boutique, gérer ton SAV et tes stocks chaque semaine.']],
  203.                         ['title' => ['fr' => '8.3 – Travailler avec des checklists intelligentes'], 'vimeoLink' => null'description' => ['fr' => 'Utilise des checklists pour ne rien oublier, automatiser les tâches répétitives et gagner un temps précieux au quotidien.']],
  204.                         ['title' => ['fr' => '8.4 – Optimiser son service client même sans équipe'], 'vimeoLink' => null'description' => ['fr' => 'Même sans avoir une équipe, tu peux offrir un SAV de qualité. Je te montre les outils et les templates pour répondre vite et bien.']],
  205.                         ['title' => ['fr' => '8.5 – Créer un espace de travail e-com structuré (digital & physique)'], 'vimeoLink' => null'description' => ['fr' => 'Tu découvriras comment organiser ton ordinateur, ton drive, ton agenda… et même ton espace de travail physique pour plus de clarté et de motivation.']],
  206.                     ]
  207.                 ],
  208.                 [
  209.                     'title' => ['fr' => 'MODULE 9'],
  210.                     'categoryTitle' => ['fr' => 'SYSTÈMES & AUTOMATISATION POUR L’E-COMMERCE'], // Keeping this category title as per CSV row for Module 9.
  211.                     'description' => ['fr' => ''],
  212.                     'videos' => [
  213.                         ['title' => ['fr' => '9.0 – Introduction du module (facecam)'], 'vimeoLink' => null'description' => ['fr' => 'Ce module est là pour t’éviter les mauvaises surprises. On va t’aider à te mettre en règle simplement, sans stress.']],
  214.                         ['title' => ['fr' => '9.1 – Ai-je besoin de déclarer quelque chose dès maintenant ?'], 'vimeoLink' => null'description' => ['fr' => 'Tu comprendras quand déclarer ton activité, et à partir de quel moment tu dois te mettre en règle.']],
  215.                         ['title' => ['fr' => '9.2 – Choisir le bon statut juridique'], 'vimeoLink' => null'description' => ['fr' => 'Micro-entreprise, société, portage… on t’explique chaque option avec ses avantages, inconvénients et pour qui c’est adapté.']],
  216.                         ['title' => ['fr' => '9.3 – Comment créer son statut facilement ?'], 'vimeoLink' => null'description' => ['fr' => 'Un tuto simple et concret pour créer ton statut en ligne, sans te perdre dans les papiers.']],
  217.                         ['title' => ['fr' => '9.4 – Les obligations à connaître (TVA, compta, facturation)'], 'vimeoLink' => null'description' => ['fr' => 'Pas besoin d’être expert-comptable, mais tu dois connaître les bases. Je t’explique tout ce que tu dois savoir pour être clean.']],
  218.                         ['title' => ['fr' => '9.5 – Être clean avec Shopify, Stripe et ton compte bancaire'], 'vimeoLink' => null'description' => ['fr' => 'On te montre comment relier les bons comptes et éviter les blocages de paiements en restant 100% conforme.']],
  219.                     ],
  220.                 ],
  221.                 [
  222.                     'title' => ['fr' => 'MODULE 10'],
  223.                     'categoryTitle' => ['fr' => 'CONCLUSION'],
  224.                     'description' => ['fr' => ''],
  225.                     'videos' => [
  226.                         ['title' => ['fr' => 'CONCLUSION - Le début de ton aventure !'], 'vimeoLink' => 'https://player.vimeo.com/video/1094456166''description' => ['fr' => 'Bravo pour être allé jusqu’au bout ! Dans cette vidéo, je te donne les prochaines étapes pour lancer ta boutique, prendre confiance, et continuer à progresser jour après jour.']],
  227.                     ],
  228.                 ]
  229.             ],
  230.         ];
  231.     }
  232.     /**
  233.      * @return array[]
  234.      */
  235.     private function getDigitalAcademyContent(): array
  236.     {
  237.         return [
  238.             'modules' => [
  239.                 [
  240.                     'title' => ['fr' => 'MODULE 1'],
  241.                     'categoryTitle' => ['fr' => 'APPRENDS À TE VENDRE EN RESTANT TOI-MEME'],
  242.                     'description' => ['fr' => ''],
  243.                     'videos' => [
  244.                         ['title' => ['fr' => 'Introduction du module 1'], 'vimeoLink' => 'https://player.vimeo.com/video/1094357152''description' => ['fr' => '']],
  245.                         ['title' => ['fr' => '1.1 – Qui es-tu vraiment ?'], 'vimeoLink' => 'https://player.vimeo.com/video/1093848699''description' => ['fr' => 'Identifie tes valeurs, tes passions, et ce qui te rend unique. À travers des exercices simples (comme le MBTI), tu vas poser les fondations de ton identité de marque. Parce qu’avant de se vendre, il faut déjà bien se connaître.']],
  246.                         ['title' => ['fr' => '1.2 – Lever les blocages qui empêchent de se montrer'], 'vimeoLink' => 'https://player.vimeo.com/video/1093848647''description' => ['fr' => 'Tu as peur du jugement, tu procrastines, tu doutes ? Tu n’es pas seul(e). Dans cette vidéo, on va déconstruire ces blocages et t’aider à passer à l’action avec plus de clarté et de sérénité']],
  247.                         ['title' => ['fr' => '1.3 – Construis ta vision : savoir où tu vas pour mieux avancer'], 'vimeoLink' => 'https://player.vimeo.com/video/1093848754''description' => ['fr' => 'Une vision bien définie, c’est un GPS. Tu vas poser les bases de ce à quoi tu veux que ton activité ressemble dans 6 mois, 1 an, 5 ans. Et surtout, comprendre comment le personal branding peut t’y conduire.']],
  248.                     ]
  249.                 ],
  250.                 [
  251.                     'title' => ['fr' => 'MODULE 2'],
  252.                     'categoryTitle' => ['fr' => 'CRÉE UNE MARQUE QUI INSPIRE CONFIANCE'],
  253.                     'description' => ['fr' => ''],
  254.                     'videos' => [
  255.                         ['title' => ['fr' => 'Introduction du module 2'], 'vimeoLink' => 'https://player.vimeo.com/video/1094357224''description' => ['fr' => '']],
  256.                         ['title' => ['fr' => '2.1 – Ta singularité, ton superpouvoir'], 'vimeoLink' => 'https://player.vimeo.com/video/1093849347''description' => ['fr' => 'On ne choisit pas une personne parce qu’elle est "comme les autres". On la suit parce qu’elle est différente. Dans cette vidéo, tu vas apprendre à faire de ta différence une force.']],
  257.                         ['title' => ['fr' => '2.2 – Clarifier ton positionnement et ta promesse'], 'vimeoLink' => 'https://player.vimeo.com/video/1093849418''description' => ['fr' => 'Positionnement flou = Projet flou = business flou. On t’aide à définir ce que tu proposes, à qui, et pourquoi toi plutôt qu’un autre afin de gagner en clarté et en impact.']],
  258.                         ['title' => ['fr' => '2.3 – Définis tes thèmes de communication pour ne jamais être à court d’idées'], 'vimeoLink' => 'https://player.vimeo.com/video/1093849286''description' => ['fr' => 'On t’aide à créer les 3 à 5 grandes thématiques autour desquelles tu vas pouvoir bâtir ta stratégie de contenu, sans t’éparpiller. Tu pourras enfin publier régulièrement sans te demander "je parle de quoi aujourd’hui ?"']],
  259.                         ['title' => ['fr' => '2.4 – Storytelling : Écrire ton histoire pour connecter'], 'vimeoLink' => 'https://player.vimeo.com/video/1093849476''description' => ['fr' => 'Les gens n’achètent pas un produit, ils achètent une histoire. Tu vas apprendre à raconter ton parcours, tes motivations et tes galères avec authenticité pour créer du lien et inspirer confiance.']],
  260.                     ]
  261.                 ],
  262.                 [
  263.                     'title' => ['fr' => 'MODULE 3'],
  264.                     'categoryTitle' => ['fr' => 'PANORAMA DES RÉSEAUX SOCIAUX (EN 2025)'],
  265.                     'description' => ['fr' => ''],
  266.                     'videos' => [
  267.                         ['title' => ['fr' => 'Introduction du module 3'], 'vimeoLink' => 'https://player.vimeo.com/video/1094357423''description' => ['fr' => '']],
  268.                         ['title' => ['fr' => '3.1 – Introduction : choisir les bons réseaux pour toi'], 'vimeoLink' => 'https://player.vimeo.com/video/1093852316''description' => ['fr' => 'Tous les réseaux ne se valent pas. On te donne une vision claire, chiffres à l’appui, des forces, faiblesses et opportunités de chaque plateforme en 2025']],
  269.                         ['title' => ['fr' => '3.2 – Instagram'], 'vimeoLink' => null'description' => ['fr' => 'Tu découvriras les chiffres, les formats qui fonctionnent (carrousel, reels, stories) et comment les utiliser intelligemment pour créer une communauté engagée et visuellement séduisante.']],
  270.                         ['title' => ['fr' => '3.3 – TikTok'], 'vimeoLink' => null'description' => ['fr' => 'Comprendre l’algorithme, adapter ton contenu aux tendances, et surtout te montrer authentique. Tu verras comment TikTok peut booster ta visibilité, même avec peu d’abonnés.']],
  271.                         ['title' => ['fr' => '3.4 – YouTube'], 'vimeoLink' => 'https://player.vimeo.com/video/1094449337''description' => ['fr' => 'Tu découvriras pourquoi YouTube est une machine à revenus longue durée et comment structurer ta chaîne, même si tu débutes. On parle vidéos longues, shorts et stratégie SEO avec des outils à l\'appui']],
  272.                         ['title' => ['fr' => '3.5 – LinkedIn'], 'vimeoLink' => null'description' => ['fr' => 'Tu verras comment te positionner comme expert(e) sur ce réseau souvent sous-estimé. Idéal pour les freelances B2B, coachs ou entrepreneurs en quête de crédibilité.']],
  273.                     ]
  274.                 ],
  275.                 [
  276.                     'title' => ['fr' => 'MODULE 4'],
  277.                     'categoryTitle' => ['fr' => 'MAÎTRISE TA STRATÉGIE DE CONTENU DE A À Z'],
  278.                     'description' => ['fr' => ''],
  279.                     'videos' => [
  280.                         ['title' => ['fr' => 'Introduction du module 4'], 'vimeoLink' => 'https://player.vimeo.com/video/1094357348''description' => ['fr' => '']],
  281.                         ['title' => ['fr' => '4.1 – Trouver tes idées de contenus'], 'vimeoLink' => 'https://player.vimeo.com/video/1094447220''description' => ['fr' => 'Tu apprendras à identifier les attentes de ton audience, t’inspirer sans copier, et construire une vraie “banque à idées”. On te partagera aussi des méthodes simples pour ne jamais être à court d’inspiration (frameworks, prompts IA, veille stratégique…).']],
  282.                         ['title' => ['fr' => '4.2 – Créer un contenu qui capte l’attention'], 'vimeoLink' => 'https://player.vimeo.com/video/1094447263''description' => ['fr' => 'On rentre dans le concret : comment faire un bon hook, structurer ton message, choisir le bon format (reel, carousel, short, tweet, post…) et produire un contenu clair, percutant et aligné avec ta marque. Tu découvriras aussi les mécaniques qui rendent un post viral.']],
  283.                         ['title' => ['fr' => '4.3 – Planifier et organiser ta production'], 'vimeoLink' => 'https://player.vimeo.com/video/1094447175''description' => ['fr' => 'Tu découvriras comment bâtir un calendrier éditorial cohérent, planifier ta semaine de contenu et gagner un temps fou avec des outils (comme Notion, Trello…). Le but ? Publier avec régularité, sans presseion et avec une vision claire.']],
  284.                     ]
  285.                 ],
  286.                 [
  287.                     'title' => ['fr' => 'MODULE 5'],
  288.                     'categoryTitle' => ['fr' => 'TRANSFORME TON INFLUENCE EN REVENUS'],
  289.                     'description' => ['fr' => ''],
  290.                     'videos' => [
  291.                         ['title' => ['fr' => 'Introduction du module 5'], 'vimeoLink' => 'https://player.vimeo.com/video/1094357292''description' => ['fr' => '']],
  292.                         ['title' => ['fr' => '5.1 – Introduction : Choisir son modèle de revenus'], 'vimeoLink' => null'description' => ['fr' => 'Affiliation, vente de services (freelance, coaching), création d’offres digitales (ebooks, formations), UGC, partenariats avec des marques… Dans cette vidéo, on explore les différents modèles de monétisation qui existent, avec des exemples concrets pour t’aider à choisir celui qui correspond à ton profil, ton audience et ton style de contenu.']],
  293.                         ['title' => ['fr' => '5.2 – Gagner de l’argent avec l’affiliation'], 'vimeoLink' => null'description' => ['fr' => 'Dans cette vidéo, on explore comment générer des revenus en recommandant des produits ou services d’autres marques. Tu découvriras comment choisir les bons programmes d’affiliation, comment intégrer des liens affiliés dans ton contenu sans perdre en authenticité, et comment optimiser tes résultats avec des techniques simples mais efficaces.']],
  294.                         ['title' => ['fr' => '5.3 – Vendre ses services grâce à sa présence en ligne'], 'vimeoLink' => null'description' => ['fr' => 'Que tu sois coach, community manager, graphiste ou freelance, les réseaux sociaux peuvent devenir ton premier canal d’acquisition client. Cette vidéo t’aide à structurer ton offre de service, à mettre en avant ton expertise et à attirer des prospects qualifiés grâce à du contenu stratégique.']],
  295.                         ['title' => ['fr' => '5.4 – Créer et vendre ses propres produits (digitaux ou physiques)'], 'vimeoLink' => null'description' => ['fr' => 'E-books, formations, templates, objets physiques… Si tu veux transformer ton audience en clients, cette vidéo t’aide à poser les bases solides d’un produit pertinent. Tu verras comment valider une idée, construire ton offre, et utiliser les réseaux sociaux pour la promouvoir avec impact.']],
  296.                         ['title' => ['fr' => '5.5 – Apprendre à vendre sans forcer'], 'vimeoLink' => null'description' => ['fr' => 'Dans cette vidéo, tu découvriras comment vendre de manière naturelle et alignée : pas besoin de manipuler ou forcer. On parlera de tunnels de vente simples, de call-to-action efficaces, de closing soft, et des erreurs à éviter pour ne pas perdre la confiance de ton audience. Le but : convertir tout en gardant ta personnalité.']],
  297.                     ]
  298.                 ],
  299.                 [
  300.                     'title' => ['fr' => 'MODULE 6'],
  301.                     'categoryTitle' => ['fr' => 'MAÎTRISER LES OUTILS CRÉATIFS'],
  302.                     'description' => ['fr' => ''],
  303.                     'videos' => [
  304.                         ['title' => ['fr' => 'Introduction du module 6'], 'vimeoLink' => 'https://player.vimeo.com/video/1094357490''description' => ['fr' => '']],
  305.                         ['title' => ['fr' => '6.1 – Créer des visuels impactants avec Canva - Exemple : Comment faire une stories'], 'vimeoLink' => null'description' => ['fr' => 'Apprends à utiliser Canva pour créer des visuels pros, attractifs et cohérents avec ton image de marque. Cette vidéo te montre les bases et les astuces essentielles pour gagner du temps.']],
  306.                         ['title' => ['fr' => '6.2 – Monter des vidéos efficaces avec CapCut - Exemple : Publier sa premier vidéo TikTok'], 'vimeoLink' => null'description' => ['fr' => 'Découvre comment monter rapidement des vidéos captivantes depuis ton téléphone. L’objectif : du contenu pro sans logiciel compliqué ni budget.']],
  307.                         ['title' => ['fr' => '6.3 - Planifier et analyser son contenu : Les outils indispensables'], 'vimeoLink' => null'description' => ['fr' => 'Optimise ta productivité avec Notion : planification de contenu, suivi de publications, banque d’idées… Un espace simple pour structurer toute ta stratégie.']],
  308.                     ]
  309.                 ],
  310.                 [
  311.                     'title' => ['fr' => 'MODULE 7'],
  312.                     'categoryTitle' => ['fr' => 'UTILISER L’IA POUR BOOSTER TON CONTENU'],
  313.                     'description' => ['fr' => ''],
  314.                     'videos' => [
  315.                         ['title' => ['fr' => 'Introduction du module 7'], 'vimeoLink' => 'https://player.vimeo.com/video/1094357381''description' => ['fr' => '']],
  316.                         ['title' => ['fr' => '7.1 – Brainstorming, idées et scénarios avec ChatGPT'], 'vimeoLink' => null'description' => ['fr' => 'Tu verras comment utiliser l’IA pour trouver des idées, écrire des scripts, ou même améliorer tes posts rapidement.']],
  317.                         ['title' => ['fr' => '7.2 – Générer des visuels avec l’IA (ex : Midjourney ou Canva IA)'], 'vimeoLink' => null'description' => ['fr' => 'Découvre comment générer des visuels ou des illustrations uniques pour ton branding ou tes miniatures.']],
  318.                     ]
  319.                 ],
  320.                 [
  321.                     'title' => ['fr' => 'MODULE 8'],
  322.                     'categoryTitle' => ['fr' => 'ÉTUDES DE CAS ET ANALYSES'],
  323.                     'description' => ['fr' => ''],
  324.                     'videos' => [
  325.                         ['title' => ['fr' => 'Introduction du module 8'], 'vimeoLink' => 'https://player.vimeo.com/video/1094357461''description' => ['fr' => '']],
  326.                         ['title' => ['fr' => '8.1 – Analyse de stratégie Instagram : étude de compte'], 'vimeoLink' => null'description' => ['fr' => 'Plonge dans une stratégie Instagram performante. On analyse ensemble ce qui marche (visuels, textes, storytelling, call to action…).']],
  327.                         ['title' => ['fr' => '8.2 – Étude de cas YouTube : une vidéo à succès décortiquée'], 'vimeoLink' => null'description' => ['fr' => 'On prend une vidéo virale et on la démonte pour comprendre pourquoi elle a marché. Objectif : t’inspirer sans copier.']],
  328.                         ['title' => ['fr' => '8.3 – Décrypter un profil LinkedIn qui vend bien'], 'vimeoLink' => null'description' => ['fr' => 'Comment certains profils attirent naturellement les clients ? Dans cette vidéo, tu comprendras les mécaniques d’un bon branding pro sur LinkedIn.']],
  329.                     ]
  330.                 ],
  331.                 [
  332.                     'title' => ['fr' => 'MODULE 9'],
  333.                     'categoryTitle' => ['fr' => 'CONSTRUIRE UN PARCOURS CLIENT QUI CONVERTIT'],
  334.                     'description' => ['fr' => ''],
  335.                     'videos' => [
  336.                         ['title' => ['fr' => 'Introduction du module 9'], 'vimeoLink' => null'description' => ['fr' => '']],
  337.                         ['title' => ['fr' => '9.1 – L\'importance de metttre en place une newsletter'], 'vimeoLink' => null'description' => ['fr' => 'Pourquoi la newsletter est un levier puissant ? Tu apprendras à en créer une qui fidélise et convertit sans t’épuiser.']],
  338.                         ['title' => ['fr' => '9.2 – Utiliser les freebies et appels à l’action pour générer des leads'], 'vimeoLink' => null'description' => ['fr' => 'Un bon contenu gratuit peut transformer un inconnu en futur client. Tu découvriras comment créer un “lead magnet” efficace.']],
  339.                     ]
  340.                 ],
  341.                 [
  342.                     'title' => ['fr' => 'MODULE 10'],
  343.                     'categoryTitle' => ['fr' => 'CONCLUSION'],
  344.                     'description' => ['fr' => ''],
  345.                     'videos' => [
  346.                         ['title' => ['fr' => 'CONCLUSION'], 'vimeoLink' => 'https://player.vimeo.com/video/1094447329''description' => ['fr' => '']],
  347.                     ]
  348.                 ]
  349.             ],
  350.         ];
  351.     }
  352.     /**
  353.      * @param string|null $value
  354.      * @return string
  355.      */
  356.     private function quote(?string $value): string
  357.     {
  358.         if ($value === null) {
  359.             return 'NULL';
  360.         }
  361.         return $this->connection->quote($value);
  362.     }
  363. }