Are you an LLM? Read llms.txt for a summary of the docs, or llms-full.txt for the full context.
Skip to content

Alışveriş

Sepetten sipariş belgesine

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 = false ise 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 durumNeden
Kart (CARD)PAYMENT_FAILEDHenüz sağlayıcıdan başarı gelmedi; ödeme bekler
Havale (TRANSFER)PAYMENT_WAITINGOperasyon onayı bekler
Cari (ACCOUNT) veya çevrimdışı / sıfır tutarPENDINGTahsilat 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ı
  • AdminBuyer sipariş 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 buyerOrders koleksiyonuna 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.

DurumAnlamı
PAYMENT_WAITINGHavale bildirimi / onay bekleniyor
PAYMENT_FAILEDKart henüz başarılı değil
PAYMENT_TIMEOUTÖdeme süresi doldu
PENDINGDepo kuyruğunda
APPROVEDOnaylandı
IN_PROGRESSHazırlanıyor
READYTeslime hazır
SHIPPEDYola çıktı; stok çıkışı bu adımda
DELIVEREDTeslim 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.