package routes import ( "bssapp-backend/db" "bssapp-backend/queries" "context" "encoding/json" "log" "net/http" "time" ) // ✅ GET /api/order-inventory?code=...&color=...&color2=... func GetOrderInventoryHandler(w http.ResponseWriter, r *http.Request) { code := r.URL.Query().Get("code") color := r.URL.Query().Get("color") color2 := r.URL.Query().Get("color2") if code == "" { http.Error(w, "Eksik parametre: code gerekli", http.StatusBadRequest) return } // 🔧 Normalize eksik renk parametreleri if color == "" { color = " " } if color2 == "" { color2 = " " } log.Printf("🎨 [ORDERINV] İstek alındı -> code=%q | color=%q | color2=%q", code, color, color2) // ✅ MSSQL bağlantısını ve timeout'u oluştur ctx, cancel := context.WithTimeout(context.Background(), 15*time.Second) defer cancel() rows, err := db.MssqlDB.QueryContext(ctx, queries.GetOrderInventory, code, color, color2) if err != nil { log.Printf("❌ [ORDERINV] SQL çalıştırılamadı: %v", err) http.Error(w, "SQL hatası: "+err.Error(), http.StatusInternalServerError) return } defer func() { if cerr := rows.Close(); cerr != nil { log.Printf("⚠️ [ORDERINV] rows.Close() hatası: %v", cerr) } }() type Row struct { UrunKodu string `json:"UrunKodu"` RenkKodu string `json:"RenkKodu"` RenkAciklamasi string `json:"RenkAciklamasi"` Beden string `json:"Beden"` Yaka string `json:"Yaka"` KullanilabilirAdet float64 `json:"KullanilabilirAdet"` } var list []Row for rows.Next() { var r Row if err := rows.Scan( &r.UrunKodu, &r.RenkKodu, &r.RenkAciklamasi, &r.Beden, &r.Yaka, &r.KullanilabilirAdet, ); err != nil { log.Printf("⚠️ [ORDERINV] Scan hatası: %v", err) continue } list = append(list, r) } if err := rows.Err(); err != nil { log.Printf("❌ [ORDERINV] Rows hatası: %v", err) http.Error(w, "Veri okuma hatası: "+err.Error(), http.StatusInternalServerError) return } log.Printf("✅ [ORDERINV] %s / %s / %s -> %d kayıt döndü", code, color, color2, len(list)) w.Header().Set("Content-Type", "application/json; charset=utf-8") if err := json.NewEncoder(w).Encode(list); err != nil { log.Printf("❌ [ORDERINV] JSON encode hatası: %v", err) http.Error(w, "JSON encode başarısız", http.StatusInternalServerError) } }