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 :

  1. Cherche d'abord dans le cart WooCommerce (session volatile)
  2. Puis dans les métadonnées de l'order (qui peuvent ne pas encore être écrites)
  3. 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

  1. vef_gc_maybe_link_order_to_booking : appelé avec $order
  • ✅ Fonctionnera avec la requête SQL sur wc_order_id
  1. vef_gc_check_booking_expiration : appelé avec $order_id
  • ✅ Fonctionnera avec la requête SQL sur wc_order_id
  1. vef_gc_check_expiration_during_creation : appelé sans paramètres
  • ✅ Fonctionnera en parcourant le cart pour obtenir cart_item_key

Tests à effectuer

  1. Ajouter un produit au panier et vérifier que queue_id est trouvé
  2. Passer une commande et vérifier que queue_id est trouvé pendant le checkout
  3. Après la commande, vérifier que queue_id est trouvé avec order_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.

View original on GitHub ↗

This issue has 2 comments on GitHub. Read the full discussion on GitHub ↗