Alışveriş
Alıcının gördüğü “sipariş ver” düğmesi aslında birkaç hizmeti sırayla çağırır. Bu sayfa o sırayı anlatır.
1. Katalog ve arama
Alıcının seçili teslimat adresi, hangi depodan alışveriş yapacağını belirler. v1 araması MeiliSearch product indeksinde çalışır; filtreler depo, şirket tipi, kategori ve isteğe bağlı yalnız indirimli (onlyDiscounted) ürünlerdir. İndirim, kademe satırında priceWithoutDiscount > price ise vardır; yüzde alanı sinyal değildir.
Sonuçlar o deponun fiyat kademeleriyle doldurulur. Ürünün seçenekleri varsa (kalite, artı/eksi, görsel) her seçenek kendi birim fiyatını taşır: taban fiyat + deponun kg başına ek fiyatı. Ek fiyat satırı olmayan seçenek o depoda satılmaz.
Favori Prisma ProductFavorite tablosundadır. Ürün talebi Mongo productRequests koleksiyonuna düşer; sohbet tek bir ürün talepleri odasında toplanır (alıcı başına bir oda, ürün başına değil).
2. Sepet
Sepete ekleme Prisma ProductBasket satırını yazar veya günceller (kullanıcı + ürün tektir). İsteğe bağlı optionId o satırdaki seçimi tutar; boş bırakmak mevcut seçimi korur, açıkça null göndermek taban ürüne döner. Sepet henüz sipariş değildir; stok rezervasyonu bu adımda anlatılan kod yolunda yoktur.
3. Önizleme
Satın alma önizlemesi siparişi kaydetmeden şunları kurar:
- Alıcı, teslimat adresi, fatura adresi
- Depo kararı ve asgari sepet kuralı (alıcının grubu
isMinBasketRequired = falseise bu kural atlanır) - Cari bakiye ve varsa hediye bakiye mesajı (Ödüller)
- Aktif sepet satırları, seçenek fiyatları ve depo fiyatları
- Kargo, grup indirimi, içeride taşıma, cari kullanımı
- Teslimat bloğu (tarih, tür, mesafe)
Grup indirimi yalnız alıcının aktif grubundan gelir: discountRate > 0 ve sepet neti eşiğin üstünde (>). Eski evrensel “15.000 ₺ üstü %3” kuralı yoktur. Uygulanan kural sipariş belgesindeki purchase.discount kopyasına yazılır; tartı sonrası yeniden hesap bu kopyayı kullanır, güncel grubu yeniden okumaz.
Sonuç, henüz kaydedilmemiş bir sipariş belgesi görünümüdür.
4. Sipariş oluşturma
Aynı kullanıcı için kilit alınır. Ödeme bekleyen eski siparişler iptal edilebilir. Sonra Mongo’da buyerOrders belgesi oluşur.
İlk durum ödeme yöntemine bağlıdır:
| Yöntem | İlk durum | Neden |
|---|---|---|
Kart (CARD) | PAYMENT_FAILED | Henüz sağlayıcıdan başarı gelmedi; ödeme bekler |
Havale (TRANSFER) | PAYMENT_WAITING | Operasyon onayı bekler |
Cari (ACCOUNT) veya çevrimdışı / sıfır tutar | PENDING | Tahsilat sipariş anında kapanmış sayılır |
Cari kullanıldıysa USE_BALANCE_FOR_PURCHASE hareketi yazılır. PENDING olan sipariş buyer-order.created olayını üretir ve sepet temizlenir. Kart/havale siparişinde bu olay ödeme düşünce üretilir.
Seçilmiş ürün seçeneği kalem üzerine anlık kopya olarak yazılır (option: id, ad, kalite, taban fiyat, kg ek fiyat). Kalem birim fiyatı taban + ek fiyattır.
Sipariş oluşunca ne olur?
buyer-order.created dinleyicisi (kodda) şunları yapar:
- Bölge kilidi bildirimi (kapsama alanı)
- Yönetici e-postası ve alıcı push
- Telegram uyarısı
AdminBuyersipariş sayacı- Favori upsert
- BigQuery sipariş ve kalem satırları
- Sipariş notundan AI çıkarımı
- CRM notlarının yetkili notuna aktarımı
- Satış raporu kuyruğu
Teslim (DELIVERED) olunca ilk ve ikinci alışveriş ödülü denenebilir: Ödüller.
Yeni mobilde v2 farkı
- Katalog ve arama MeiliSearch'ten değil doğrudan MySQL'den okunur.
ProductSearchDecider, Türkçe harf katlama ve hata payını; ortak fiyat/satılabilirlik kararları katalog, sepet ve siparişte aynı sonucu yönetir. - Sepet
/orders/buyer/basket, seçenekler/orders/buyer/purchase-options, önizleme ve oluşturma/orders/buyer/purchase/*yollarındadır. - v2 siparişi ortak
buyerOrderskoleksiyonuna v1'in belge biçiminde yazar. Hazırlık, fatura ve kart ödeme geri çağrısı geçiş boyunca v1'de devam eder. - Kart geri çağrısından geçen siparişte v1'in BigQuery, Gemini ve e-posta yan etkileri çalışabilir. v2'nin havale veya cari üzerinden ödendi yaptığı siparişte bilerek taşınmayan yan etkiler çalışmaz.
Detay: Geçiş ve veri sahipliği.
Sipariş durumları
Sipariş belgesi ve kalemler aynı enum’u paylaşır. Aşağıdakiler sipariş düzeyi yaşam çizgisidir.
| Durum | Anlamı |
|---|---|
PAYMENT_WAITING | Havale bildirimi / onay bekleniyor |
PAYMENT_FAILED | Kart henüz başarılı değil |
PAYMENT_TIMEOUT | Ödeme süresi doldu |
PENDING | Depo kuyruğunda |
APPROVED | Onaylandı |
IN_PROGRESS | Hazırlanıyor |
READY | Teslime hazır |
SHIPPED | Yola çıktı; stok çıkışı bu adımda |
DELIVERED | Teslim edildi |
CANCELLED | İptal |
RETURNED | İade tamam |
Kalem üzerindeki RETURN_PENDING, RETURN_APPROVED, RETURN_IN_PROGRESS, RETURN_REJECTED değerleri açık bir iade talebinin yansımasıdır; siparişin ana durumundan ayrı tutulur.
Sonraki adım: Ödeme veya Hazırlık ve teslimat. Belge alanları: Sipariş ve iade.