Skip to content

Migre l'association conférencier<->session de Ting vers Doctrine - #2387

Draft
Korbeil wants to merge 1 commit into
afup:masterfrom
Korbeil:afup-migrer-l-association-conferencier
Draft

Migre l'association conférencier<->session de Ting vers Doctrine#2387
Korbeil wants to merge 1 commit into
afup:masterfrom
Korbeil:afup-migrer-l-association-conferencier

Conversation

@Korbeil

@Korbeil Korbeil commented Sep 2, 2026

Copy link
Copy Markdown
Member

Description

Migre l'association conférencier <-> session (table afup_conferenciers_sessions) de Ting vers Doctrine. C'est l'un des quick wins de la migration globale Ting → Doctrine suivie dans #2383, en suivant le pattern établi : déclaration des entités Doctrine → implémentation des repositories Doctrine → migration des usages → suppression des classes Ting.

Changements

  • Nouvelle entité Doctrine AppBundle\Event\Entity\TalkToSpeaker mappée sur afup_conferenciers_sessions (clé primaire composite session_id/conferencier_id, sans auto-increment ni relation — pas d'entité Doctrine Talk à ce jour).
  • Nouveau repository Doctrine AppBundle\Event\Entity\Repository\TalkToSpeakerRepository portant les 3 méthodes du repository Ting :
    • getNumberOfSpeakers() : QueryBuilder DBAL (COUNT DISTINCT + JOIN afup_sessions, filtre optionnel date_soumission), retour typé int (attendu par le DTO CFPStats) ;
    • replaceSpeakers() : EntityManager — chargement des associations existantes, remove() + persist() des nouvelles entités, un seul flush() (suppression effective même avec un tableau vide) ;
    • addSpeakerToTalk() : EntityManager — insertion seulement si l'association n'existe pas déjà (find() composite), idempotence préservée.
  • Les 7 appelants basculés sur le repository Doctrine (imports et type-hints uniquement) : CfpNotificationCommand, AddAction, EditAction, InviteAction, TalkFormHandler, EventStatsRepository, MessageFactory.
  • Suppression des classes Ting AppBundle\Event\Model\TalkToSpeaker et AppBundle\Event\Model\Repository\TalkToSpeakersRepository.
  • Baseline PHPStan mise à jour (entrées obsolètes du repository Ting supprimées, une entrée CFPStats éliminée grâce au retour typé).
  • Nouveau test d'intégration TalkToSpeakerRepositoryTest (7 tests) couvrant les 3 méthodes.

Comment tester

  1. make test-integration-ci — démarre dbtest/apachephptest, installe le vendor et lance la suite d'intégration (dont les 7 nouveaux tests).
  2. make phpstan — analyse statique niveau 10, 0 erreur.
  3. make test — suite unitaire (116 tests) + php-cs-fixer.

Notes

  • Sémantique et signatures préservées (les types Ting Talk/Speaker/Event restent dans les signatures tant que ces modèles sont sous Ting) ; les requêtes passent par le QueryBuilder DBAL et l'EntityManager — plus de SQL brut d'écriture (seule la requête de count joint la table non-entité afup_sessions).
  • Aucune migration de schéma nécessaire : la table existante et sa clé primaire composite sont conservées telles quelles.
  • Nuance assumée : l'ancien REPLACE INTO devient « insertion si absente » via l'EntityManager — en cas de course concurrente, un doublon lèverait une violation de clé primaire au lieu d'être remplacé silencieusement.
  • Le flush() unique de replaceSpeakers() ne garantit pas l'atomicité si la table de prod est encore en MyISAM.
  • Liaison vers Speaker volontairement non créée : à ajouter (FK) quand Speaker/Talk migreront vers Doctrine.

@Korbeil
Korbeil force-pushed the afup-migrer-l-association-conferencier branch from be371e3 to e1a02ca Compare September 2, 2026 19:39
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