Bu proje Trendyol back-end bootcamp bitirme projesidir.
Görevimiz : Trendyol Sepet Sistemini en baştan yazmak Eski sepet sistemimiz, gerekli şekilde scale edemediği için, bu sistemi yeniden yazmak ve üzerine yeni özellikler getirmek istiyoruz.
Gereksinim:
-
Sepette, bir veya birden çok ürün olabiliyor.
-
Sepete ürünleri ekleyebiliyoruz. Aynı ürünü tekrar eklersek, sepetteki, o ürün sayısı artıyor.
-
Sepetten ürün çıkartabiliyor ya da sepetteki o ürünün sayısını azaltabiliyoruz.
-
Sepetteki ürünleri dönerken, bir genel toplam bilgisi de dönüyor. Sepetteki ürünlerin sayısı ve fiyatlarına göre kullanıcıların ne kadar ödeyeceği bilgisini gösteriyor. 5 TL olan A ürününden 3, 10 TL olan B ürününden 2 tane varsa sepette, genel toplam bilgisi olarak 5 x 3 + 10 x 2 = 35 TL gösteriyor. 100 TL altındaki her sepet toplamı için de 4,99 kargo bedeli ekliyoruz. Üstteki bu sepet için 35 + 4,99 = 39,99 TL olarak genel toplamı, kargo bilgisni de ekleyerek dönmesini istiyoruz. Örnek json :
{ "products": [{ "id": 1, "image": "imageURL", "title": "product1", "quantity": "3", "price": "5" }, { "id": 2, "image": "imageURL", "title": "product2", "quantity": "2", "price": "10" }], "basketInfo": { "Ara toplam": "35 TL", "Kargo": "4,99", "Toplam": "39,99 TL" }
Trendyol uygulamasını incelediğimde "Sepete Ekle" işlemi ürün detay ekranından yapılmakta ve her seferinde 1 adet ürün eklenmekteydi. Ben de adımlarımı buna istinaden tasarladım.
Bu gereksinim için aşağıdaki mimari oluşturulmuştur. Görseli yüksek çözünürlükte incelemek için tıklayınız.
Sepete ürün eklerken izlenen adımlar: Görseli yüksek çözünürlükte incelemek için tıklayınız.
Test çıktıları: Görseli yüksek çözünürlükte incelemek için tıklayınız
Trendyol uygulamasını incelediğimde sepette var olan bir ürünün miktarını artırmak veya azaltmak için sepet ekranına geliniyor ve ilgili ürünün sayısı listeden seçiliyor veya artı eksi tuşları ile değiştiriliyordu.
Ben de ürün miktarını artıkmak ve azaltmak için ayrı ayrı metotlar yazmak yerine "miktar" parametresi alan tek bir metot yazdım.
Bu gereksinim için aşağıdaki mimari oluşturulmuştur. Görseli yüksek çözünürlükte incelemek için tıklayınız.
Sepeteki bir ürünün miktarını değiştirmek için izlenen adımlar: Görseli yüksek çözünürlükte incelemek için tıklayınız.
Test çıktıları: Görseli yüksek çözünürlükte incelemek için tıklayınız
Bu gereksinim için aşağıdaki mimari oluşturulmuştur. Görseli yüksek çözünürlükte incelemek için tıklayınız.
Sepeteki bir ürünün miktarını değiştirmek için izlenen adımlar: Görseli yüksek çözünürlükte incelemek için tıklayınız.
Bu gereksinim için aşağıdaki mimari oluşturulmuştur. Görseli yüksek çözünürlükte incelemek için tıklayınız.
Sepeteki bir ürünün miktarını değiştirmek için izlenen adımlar: Görseli yüksek çözünürlükte incelemek için tıklayınız.
Test çıktıları: Görseli yüksek çözünürlükte incelemek için tıklayınız
Bu diyagram, projede yer alacak olan verilerin neler olduğunu belirlemek için çıkarılmıştır.
Yukarıdaki ER diyagramı ve servislere istinaden veritabanı aşağıdaki şekli almıştır. Görseli yüksek çözünürlükte incelemek için tıklayınız
Sepetteki ürünlerin sistemdeki fiyat ve stok bilgisi doğal olarak değişiyor.
- Sepetteki bir ürünün fiyatı; sepete eklendiği fiyattan daha aza düştüğü an, kullanıcılara sepetteki ürününün fiyatı azaldı diye email atmak istiyoruz.
- Sepetteki bir ürünün stoğu; 3'ten az kalırsa; kullanıcılara sepetteki ürününün tükenmek üzere diye email atmak istiyoruz.
- Sepetteki bir ürünün stoğu; 0 olursa; kullanıcılara sepetteki ürününün tükendi diye email atmak istiyoruz.
Bu gereksinimler için tasarladığım mimariler:
Görseli yüksek çözünürlükte incelemek için tıklayınız
Görseli yüksek çözünürlükte incelemek için tıklayınız
Bu mimariler için kodsal bir geliştirme yapılmamıştır.