# hBarkodDB - Akıllı Barkod Veritabanı ve Tarayıcı Bu proje, `adresler.html` dosyasındaki ürün linklerini (barkodist.com) asenkron olarak tarayarak **Ürün Adı, Ürün Resmi, Kategorisi, Ait Olduğu Şirket ve Barkod Numarasını** ayıklayan ve bunları bir veritabanında toplayan akıllı bir otomasyon sistemidir. Proje, tarama sürecini kontrol edebileceğiniz, veriler içinde arama yapıp düzenleme gerçekleştirebileceğiniz ve EAN-13 Barkod ile QR Kod üretebileceğiniz premium görünümlü, modern bir karanlık mod web arayüzüne sahiptir. --- ## 🚀 Mimaride Yapılan Son Güncelleştirmeler ve İyileştirmeler ### 1. In-Memory Batching Queue Manager (MySQL Kilitlenme Çözümü) - **Sorun**: 5 asenkron işçi (thread) veritabanından aynı anda "pending" durumundaki URL'leri okumaya ve "processing" olarak güncellemeye çalıştığında, MySQL üzerinde satır kilitlenmeleri (deadlock) ve transaction çakışmaları meydana geliyordu. - **Çözüm**: Sunucu belleğinde (RAM) çalışan ortak bir kuyruk yöneticisi (`getNextQueueItem`) geliştirildi. İşçiler veritabanını tek tek satır düzeyinde sorgulamak yerine, tek sorguda 20 adet pending URL'yi topluca çekerek veritabanında `processing` durumuna çeker ve RAM'de sırayla tüketir. Bu sayede veritabanı kilitlenmeleri tamamen engellenmiş ve tarama performansı maksimize edilmiştir. ### 2. HTTP Short-Polling Fallback (Anlık Gösterim Yedek Sistemi) - **Sorun**: Server-Sent Events (SSE) protokolü, tarayıcı ayarları, kurumsal güvenlik duvarları veya yerel ağ proxy yapılandırmaları nedeniyle anlık log akışını ve istatistikleri bloke edebiliyordu. Bu durumda arayüz bağlantı aşamasında takılı kalıyordu. - **Çözüm**: Ön yüzde [app.js](file:///D:/Calismalar/ai/hBarkodDB/public/app.js) içerisine akıllı bir yedek sistem yazıldı. SSE bağlantısı 2.5 saniye içinde kurulamadığı veya koptuğu anda, sistem otomatik olarak HTTP kısa sorgulama (Short-Polling) moduna geçerek her 1.5 saniyede bir `/api/stats` endpoint'ini sorgular. Bu sayede canlı panel her şartta kesintisiz çalışır. ### 3. Eşsiz URL Ayıklama (Kuyruk Süzgeci) - `adresler.html` dosyası içinde toplam **91,592 adet** ürün bağlantısı yer almaktadır. - Ancak bu linkler mükerrer (aynı ürün adresinin birden fazla kez tekrarlanması) kayıtlar barındırır. - Veritabanı bütünlüğünü korumak ve mükerrer taramayı engellemek adına kuyruk tablosundaki `url` sütununa benzersizlik (`@unique`) kısıtı getirilmiştir. - Yapılan analiz sonucunda dosyada tam olarak **11,439 adet benzersiz ürün** adresi olduğu tespit edilmiş ve kuyruğa başarıyla bu miktarda aktarım yapılmıştır. ### 4. Prisma `groupBy` Sıralama & Filtreleme Optimizasyonu - Kategori ve Şirket filtre comboları doldurulurken, Prisma'nın `groupBy` sorgularında `take` filtresinin sıralama kısıtı aşılmıştır. - Tüm kategori ve şirket filtreleri **ürün sayısına göre azalan sırada (en popüler olandan en aza)** listelenecek şekilde `orderBy` optimizasyonuyla güncellenmiştir. --- ## 🛠️ Kurulum ve Çalıştırma ### 1. Gereksinimler - Node.js (v18+) - MySQL (Varsayılan olarak XAMPP localhost:3306 ve `root` şifresiz kullanıcısı) ### 2. Veritabanı Hazırlama MySQL sunucunuz çalışırken aşağıdaki komut veritabanını ve gerekli tabloları otomatik oluşturur: ```bash npx prisma migrate dev --name init ``` ### 3. Çalıştırma Projeyi başlatmak için aşağıdaki komutu çalıştırın: ```bash npm start ``` Uygulama başlatıldığında `adresler.html` dosyasını otomatik okuyarak **11,439 eşsiz adresi** veritabanı kuyruğuna yükleyecek ve tarama işlemine hazır hale getirecektir. Web arayüzüne tarayıcınızdan şu adresten ulaşabilirsiniz: 👉 **[http://localhost:3000](http://localhost:3000)** --- ## 📁 Proje Yapısı - [prisma/schema.prisma](file:///D:/Calismalar/ai/hBarkodDB/prisma/schema.prisma): Veritabanı modelleri (Product ve ScrapeQueue). - [src/server.js](file:///D:/Calismalar/ai/hBarkodDB/src/server.js): API yolları, Express sunucusu, istek loglayıcı ve SSE canlı veri yayını. - [src/scraper.js](file:///D:/Calismalar/ai/hBarkodDB/src/scraper.js): HTML okuyucu, asenkron tarayıcı işçileri (in-memory batching) ve sayfa ayıklama mantığı. - [src/utils.js](file:///D:/Calismalar/ai/hBarkodDB/src/utils.js): Ürün adı miktar & birim temizleme algoritması. - [public/index.html](file:///D:/Calismalar/ai/hBarkodDB/public/index.html): Dashboard ve Veritabanı sekmelerinin bulunduğu HTML5 arayüzü (app.js scripti entegre edilmiştir). - [public/style.css](file:///D:/Calismalar/ai/hBarkodDB/public/style.css): Glassmorphism ve mikrogiriş animasyonlu modern vanilla CSS. - [public/app.js](file:///D:/Calismalar/ai/hBarkodDB/public/app.js): Ön uç dinamik yönetimi, kısa sorgulama yedek mekanizması ve JsBarcode/QRCode.js entegrasyonu. - [.gitignore](file:///D:/Calismalar/ai/hBarkodDB/.gitignore): Git takibine alınmaması gereken dosyaların yapılandırılması. --- ## ⚙️ Farklı Veritabanlarına Geçiş (Prisma) Projeyi MySQL'den başka bir veritabanına geçirmek oldukça kolaydır. ### SQLite'a Geçiş: 1. `prisma/schema.prisma` dosyasındaki `provider` değerini değiştirin: ```prisma datasource db { provider = "sqlite" url = "file:./dev.db" } ``` 2. `@db.VarChar` ve `@db.Text` gibi veritabanına özel tipleri şemadan kaldırın. 3. Yeniden migration oluşturun: `npx prisma migrate dev --name init_sqlite` ### PostgreSQL veya SQL Server'a Geçiş: 1. `.env` dosyasındaki `DATABASE_URL` değerini yeni sunucunuza göre düzenleyin. 2. `prisma/schema.prisma` dosyasında `provider` değerini `"postgresql"` veya `"sqlserver"` yapın. 3. `npx prisma migrate dev` komutunu çalıştırın.