refactor: simplifier radicalement vef_gc_get_cart_queue_id (100+ lignes → 30 lignes)
Resolved 💬 2 comments Opened Aug 12, 2025 by blegrand Closed Nov 29, 2025
Contexte
La fonction vef_gc_get_cart_queue_id fait actuellement 100+ lignes et cherche le queue_id dans plusieurs endroits (cart WooCommerce, métadonnées d'order) avant d'aller voir dans la table SQL.
Or, la table SQL vef_gc_booking_queue est LA source de vérité et contient TOUJOURS le queue_id qu'on cherche.
Problème actuel
La fonction actuelle :
- Cherche d'abord dans le cart WooCommerce (session volatile)
- Puis dans les métadonnées de l'order (qui peuvent ne pas encore être écrites)
- Jamais directement dans la table SQL \!
C'est absurde car :
- Le cart peut être vidé/modifié
- Les métadonnées peuvent ne pas encore être écrites
- La table SQL a TOUJOURS la donnée depuis la création du booking
Solution proposée
Remplacer les 100+ lignes actuelles par cette version simplifiée de 30 lignes :
function vef_gc_get_cart_queue_id($cart_item_key = null, $order = null) {
global $wpdb;
$table = $wpdb->prefix . 'vef_gc_booking_queue';
// Si on a un cart_item_key, requête SQL directe
if ($cart_item_key) {
return $wpdb->get_var($wpdb->prepare(
"SELECT id FROM $table WHERE cart_item_key = %s",
$cart_item_key
));
}
// Si on a un order, requête SQL avec wc_order_id
if ($order) {
$order_id = is_object($order) ? $order->get_id() : $order;
return $wpdb->get_var($wpdb->prepare(
"SELECT id FROM $table WHERE wc_order_id = %d",
$order_id
));
}
// Sans paramètres : trouver le premier cart_item_key GC dans le cart
if (WC()->cart) {
foreach (WC()->cart->get_cart() as $key => $item) {
if (isset($item['vef_gc_queue_id'])) {
// On a trouvé un item GC, utiliser son cart_item_key
return $wpdb->get_var($wpdb->prepare(
"SELECT id FROM $table WHERE cart_item_key = %s",
$key
));
}
}
}
return null;
}
Avantages
- ✅ Source de vérité unique : table SQL
- ✅ 70% de code en moins : 30 lignes au lieu de 100+
- ✅ Plus rapide : requêtes SQL directes avec colonnes indexées
- ✅ Plus fiable : pas de dépendance aux sessions volatiles
- ✅ Compatible : garde la même signature et comportement
Contextes d'appel vérifiés
vef_gc_maybe_link_order_to_booking: appelé avec$order
- ✅ Fonctionnera avec la requête SQL sur
wc_order_id
vef_gc_check_booking_expiration: appelé avec$order_id
- ✅ Fonctionnera avec la requête SQL sur
wc_order_id
vef_gc_check_expiration_during_creation: appelé sans paramètres
- ✅ Fonctionnera en parcourant le cart pour obtenir
cart_item_key
Tests à effectuer
- Ajouter un produit au panier et vérifier que
queue_idest trouvé - Passer une commande et vérifier que
queue_idest trouvé pendant le checkout - Après la commande, vérifier que
queue_idest trouvé avecorder_id
Impact
Cette refactorisation simplifie drastiquement le code sans changer le comportement fonctionnel. C'est une amélioration pure de la maintenabilité et des performances.
This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗