Skip to content

refactor: migration de l'entité Vote de Ting vers Doctrine (#2383) - #2414

Open
Korbeil wants to merge 1 commit into
afup:masterfrom
Korbeil:afup-migration-de-l-entite
Open

Korbeil wants to merge 1 commit into
afup:masterfrom
Korbeil:afup-migration-de-l-entite

Conversation

@Korbeil

@Korbeil Korbeil commented Sep 21, 2026

Copy link
Copy Markdown
Member

Description

Migre l'entité Vote (votes des visiteurs sur le CFP) de Ting vers Doctrine ORM, dans la continuité des autres migrations (#2383), en suivant le pattern posé par #2387. Aucun changement fonctionnel attendu : le dépôt, le listing administratif, l'affichage des votes sur une proposition et la notification Slack fonctionnent à l'identique.

Changes

  • Les votes des visiteurs sont désormais gérés par Doctrine ORM
  • Le dépôt des votes utilise le constructeur de requêtes de Doctrine DBAL au lieu de SQL brut
  • Suppression de l'ancien code d'accès à la base pour les votes

How to test

  1. Sur un évènement CFP ouvert, déposer ou modifier un vote sur une proposition : le vote est enregistré, puis modifié sans doublon.
  2. Vérifier la page de votes de l'évènement côté administration : votes groupés par proposition avec titre, note, login et commentaire.
  3. Vérifier l'affichage des votes sur une proposition du CFP côté conférencier (moyenne et badge staff).

@Korbeil
Korbeil marked this pull request as ready for review September 21, 2026 21:45
@Korbeil
Korbeil force-pushed the afup-migration-de-l-entite branch from 2b9b973 to efb323d Compare October 5, 2026 19:29
@vgreb

vgreb commented Oct 12, 2026

Copy link
Copy Markdown
Collaborator

En l'état, je pense qu'elle ne peut pas être mergée, des usages Ting de la table des votes n'ont pas été migrés

La PR supprime AppBundle\Event\Model\Vote, donc les métadonnées Ting de afup_sessions_vote_github. Or le TalkRepository Ting continue de lire cette table en s'attendant à ce que Ting hydrate des objets vote. Sans métadonnées, l'Hydrator de Ting ignore ces colonnes.

TalkRepository::getTalksBySpeakerWithVotes() (l.86-111), appelé par Event/CFP/IndexAction.php:42.
Le HydratorRelational agrège votes vers setVotes(), mais aucun objet vote n'est plus construit. talk.votes dans event/cfp/home.html.twig:44 sera au mieux vide, au pire en erreur. Le conférencier ne voit plus les votes sur ses propositions.

TalkRepository::getAllTalksAndRatingsForUser() (l.142-153), appelé par Event/Vote/IndexAction.php:38.
La ligne 46 fait $session['asvg'] ?? clone $vote, mais asvg n'est plus jamais présent. Le formulaire n'est plus pré-rempli avec le vote et le commentaire déjà donnés par l'utilisateur.

@Korbeil
Korbeil force-pushed the afup-migration-de-l-entite branch from efb323d to c1f90c9 Compare October 12, 2026 21:11
@Korbeil

Korbeil commented Oct 12, 2026 •

Copy link
Copy Markdown
Member Author

@vgreb Merci pour la review, bien vu — les deux usages Ting restants de la table des votes m'avaient échappé. Corrigés dans mon dernier commit :

  1. Votes sur la proposition côté conférencier (TalkRepository::getTalksBySpeakerWithVotes() / event/cfp/home.html.twig)
    ➡️ Suppression de la dépendance à l'hydratation Ting (HydratorRelational) : les votes sont récupérés via le nouveau dépôt Doctrine (VoteRepository::getVotesByEventGroupedBySession(), une seule requête pour la page) et passés au template list_votes.html.twig avec la même structure de données que getVotesByTalkWithUser() (moyenne, badge staff, commentaire préservés).
    ➡️ En bonus, TalkRepository::getTalksBySpeakerWithVotes() est supprimé au profit de getTalksBySpeaker() préexistant qu'on n'utilise qu'avec HydratorSingleObject — plus de jointure sur la table des votes dans TalkRepository.

  2. Pré-remplissage du formulaire de vote (TalkRepository::getAllTalksAndRatingsForUser() / Event/Vote/IndexAction.php)
    ➡️ La colonne asvg hydratée par Ting n'existe plus, donc $session['asvg'] retournait toujours null. Les votes de l'utilisateur sont maintenant récupérés en une requête Doctrine (VoteRepository::getUserVotesByEvent()) et le formulaire retrouve son vote/commentaire pré-remplis via le même chemin que les nouveaux votes ($myUserVotes[$talk->getId()] ?? clone $vote).

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.

2 participants