diff --git a/backend/gestion/handlers/panier.go b/backend/gestion/handlers/panier.go index 7fc6f506..bcc3175a 100644 --- a/backend/gestion/handlers/panier.go +++ b/backend/gestion/handlers/panier.go @@ -302,24 +302,10 @@ func ValidateBasket(c *gin.Context) { return } - // Vérifier qu'il y a au moins un article normal (non-récompense) - hasNormalItem := false - for _, item := range items { - if isReward, ok := item["is_reward"].(bool); !ok || !isReward { - hasNormalItem = true - break - } - } - if !hasNormalItem { - log.Printf("❌ [CHECKOUT] Panier contient uniquement des récompenses pour %s", usernameStr) - c.JSON(http.StatusBadRequest, gin.H{"error": "Vous devez commander au moins un produit de la boutique pour bénéficier de votre récompense"}) - return - } - log.Printf("🛒 [CHECKOUT] Panier: %d articles", len(items)) // ============================================ - // 1️⃣b Vérifier le minimum de commande selon la zone + // 1️⃣b Calculer le total et vérifier la présence d'au moins un article payant // ============================================ var cartTotal float64 for _, item := range items { @@ -328,6 +314,21 @@ func ValidateBasket(c *gin.Context) { } } + // Détecter si le panier contient un article récompense (prix 0) + hasRewardItem := false + for _, item := range items { + if price, ok := item["price"].(float64); ok && price == 0 { + hasRewardItem = true + break + } + } + // Si récompense présente mais aucun produit payant → refuser + if hasRewardItem && cartTotal <= 0 { + log.Printf("❌ [CHECKOUT] Panier contient uniquement des récompenses pour %s", usernameStr) + c.JSON(http.StatusBadRequest, gin.H{"error": "Vous devez commander au moins un produit de la boutique pour bénéficier de votre récompense"}) + return + } + // Récupérer les paramètres globaux (zones + parrainage) appSettings, _ := database.GetSettings()