Firebase Üzerinde Özel E-ticaret
Sıfırdan özel bir e-ticaret sitesi inşa ettim. Hazır platformlar kullanmadım. Bunun yerine Firebase Realtime Database ve Netlify kullandım.
Müşterinin özel bir kurulumuna ihtiyacı vardı. Fiyatlandırma varyantlarına sahip bir ürün kataloğu ve bir yönetim paneli istiyorlardı. Ayrıca satış ekiplerinin doğrudan site üzerinden sipariş verebilmesi gerekiyordu.
Temel teknik zorlukları nasıl çözdüğümü aşağıda bulabilirsiniz.
Veri Ayrıştırma E-ticaret veritabanını dahili yönetim veritabanından ayrı tuttum. Bu, ticari verilerin çalışan maaşları veya bütçeler gibi hassas dosyalarla karışmasını önler.
Fiyatlandırma İçin Veri Modelleme Fiyatlandırma planları genellikle farklı ürünlerde tekrarlanır. Eğer her ürünün içinde plan verilerini kopyalarsanız, güncellemeler bir kabusa dönüşür.
- Tüm planlar için küresel bir arşiv oluşturdum.
- Her ürün yalnızca bir plan ID dizisi tutar.
- Bu, güncellemeleri hızlandırır ve veri hatalarını önler.
Atomik Sipariş Numaralandırma Birden fazla kişi aynı anda sipariş verdiğinde bir yarış durumu (race condition) ile karşılaşırsınız. Eğer iki kullanıcı aynı son sipariş numarasını okursa, siparişlerden biri diğerinin üzerine yazılır.
- Bunu çözmek için Firebase transactions kullandım.
runTransactionfonksiyonu, çok sayıda eşzamanlı kullanıcı olsa bile numaranın doğru şekilde artmasını sağlar.- Bu, her siparişin benzersiz bir numaraya sahip olmasını garanti eder.
Güvenli Yönetici Erişimi Şifreleri kaynak kodda saklamak istemedim. Ayrıca MD5 gibi basit hash yöntemlerinden de kaçındım.
- Web Crypto API aracılığıyla PBKDF2 kullandım.
- Bu, hash işlemine binlerce yineleme uygular.
- Bu, kaba kuvvet (brute-force) saldırılarını hackerlar için çok maliyetli hale getirir.
- Kodda yalnızca salt ve hash değerini saklıyorum.
'Sıfır' Hatasını Düzeltme Fiyatı 0 olan ürünlerin "fiyatı tanımlanacak" şeklinde göründüğü bir hata buldum.
- Bu, JavaScript'in 0 değerini "falsy" olarak değerlendirmesinden kaynaklanıyordu.
- Mantığımı değiştirerek bunu düzelttim.
- "price || null" kullanmak yerine "price != null" kullandım.
- Bu, sistemin 0'ı geçerli bir sayı olarak tanımasını sağlar.
CSP Yapılandırması Firebase dinamik alt alan adları kullanır. İçerik Güvenlik Politikası (CSP) için standart bir HTML meta etiketi bu joker karakterleri (wildcards) yönetemez.
- CSP'yi HTML'den Netlify HTTP başlıklarına taşıdım.
- Bu, Firebase servislerinin doğru çalışması için joker karakterler kullanmama olanak tanıdı.
Özel sistemler inşa etmek sadece kod yazmaktan fazlasını gerektirir. Üretim ortamındaki hataları önleyecek mimari seçimler yapmayı gerektirir.
Kaynak: https://dev.to/androve2k/custom-e-commerce-on-firebase-catalog-atomic-orders-and-admin-panel-42ec
