Sipariş Akışları
Yemeksepeti Mahalle (bundan sonra YS olarak kısaltılacak) entegrasyonu kapsamında, YS pazaryerinde oluşan siparişin BiSU'da oluşturulması ve teslimatı süresince izleyeceği akış bu dokümanda bulunmaktadır.
YS pazaryeri sipariş iletimi için push yöntemi tercih edilmiştir. YS'de oluşan
sipariş, YS tarafından v2 (server) API'mizdeki bir endpoint'e istek gövdesi
içinde gönderilmektedir. Bu noktada hem sipariş oluşturma işlemi hem de YS tarafından
iptal edilen siparişlerin iptal işlemleri bu endpoint üzerinden iletilmektedir.
Bahsi geçen endpoint (POST /api/v2/yemeksepeti/order/create) bir Bearer token ile
authorize edilmektedir. YS panelinde tanımlı endpoint ve token ile BiSU'ya gelmektedir.
Yemeksepeti Mahalle içerisindeki Market ve Su kategorileri farklı tanımlamalar ile yürümektedir. Bu sebeple endpoint ve token tanımlamaları farklıdır. Aynı zamanda depo tanımlamaları da farklıdır.
YS'nin sipariş oluşturma ve iptal etme işlemlerinde gönderdiği istek gövdesi aynıdır.
Değişen sadece iptal nedeninin yer aldığı cancellation objesidir. Gelen istek gövdesi
sipariş durumuna göre iptal veya sipariş yaratma akışlarına sokulmaktadır.
Aşağıda bazı sipariş durumları listelenmiştir. En güncel sipariş durum sabitlerini
görmek için lütfen v2 reposuna bakınız.
RECEIVED: Sipariş oluştuğunda YS'nin belirlediği durumlardan biri
READY_FOR_PICKUP: Sipariş oluştuğunda veya teslime hazır olduğunda geçilen durum
DISPATCHED: BiSU tarafında sipariş teslim ediliğinde geçilen durum
CANCELLED: Sipariş iptal edildiğinde geçilen durum
UNASSIGNED: Sipariş oluştuğunda YS'nin belirlediği durumlardan biri
ORDER_RECONCILED: Kısmi iade yapıldığında siparişi bu duruma YS geçirmektedir
DELIVERED: Tamamlanan siparişler için YS'nin kullandığı bir durum
Bu sipariş durumlarının yanında sepetteki her bir ürünün durumu bulunmaktadır, bunlar:
IN_CART: Ürünün sepette ve teslim edilebilirliğini ifade eder
NOT_FOUND: Ürün sepetten çıkarıldığında geçilir
REPLACED: BiSU tarafında kullanılmamaktadır
NOT_PROCESSED: Sipariş oluştuğunda bu durumdadır
Yemeksepeti'nden gelen bir siparişin gövdesi şuradan incelenebilir.
Gelen gövdeden sipariş akışı status alanındaki değere göre ilerlemektedir. Sipariş
durumu UNASSIGNED veya RECEIVED ise sipariş yaratma, CANCELLED ise sipariş
iptal akışına iletilmektedir.
Webhook'un sorumluluğu gelen gövdeden bir class yaratmak ve belirli validasyonları yapıp siparişin servisini (market, su) belirleyip ilgili akışlara yönlendirmektir.
Sipariş oluşturma akışında yapılan ise diğer entegrasyonlarla aynı olup
SUBSCRIBER_EVENTS kuyruğuna siparişin iletilmesidir.
Burada siparişteki müşterinin kaydı kontrol edilip yoksa oluşturulur. Devam eden akışta diğer entegrasyonlarla benzer süreçler bulunmaktadır. Yalnızca YS tarafında siparişin tamamlanma durumu olmadığı için (siparişi DELIVERED statüsüne yalnızca YS geçirebilmektedir) siparişin tamamlanma statüsü BiSU tarafında DISPATCHED olarak belirlenmiştir. BiSU'daki ORDER_CONFIRMED statusu için YS'de bir değişiklik yapılmamaktadır.
Sipariş akışında kurallar şöyle özetlenebilir:
- Her bir sipariş yalnızca bir kez iade yapılabilir. Kısmi iade akışı yalnızca bir kez gerçekleştirilebilir.
- Sipariş YS'de DISPATCHED olduktan sonra iade ve iptal yapılamaz.
- Sipariş DELIVERED edilemez. Belirsiz bir zaman sonra YS kendisi bu statüse geçirmektedir.
- YS siparişi DISPATCHED iken CANCELLED edebilir. BiSU tarafı edemez.
- Siparişin oluştuğu depo değiştirilemez.
BiSU ve YS arasındaki sipariş durum eşlemesi şu şekildedir:
RECEIVED/UNASSIGNED/READY_FOR_PICKUP: ORDER_CREATED
DISPATCHED/DELIVERED: ORDER_COMPLETED
CANCELLED: ORDER_CANCELLED
ORDER_RECONCILED: ORDER_CREATED/ORDER_CONFIRMED
ORDER_RECONCILED durumu kısmi iade sonrası YS tarafından atanmaktadır. Bu sipariş durumu özelinde herhangi bir iş kuralı BiSU tarafında işletilmemektedir.
YS entegrasyonu kapsamında konum kontrolleri devre dışı bırakılmıştır. YS tarafındaki kapsamlar kontrol edilmeksizin ilgili depoya atanır.
Siparişteki ürünlerde bir stok problemi yok ise sipariş oluşturulur ve ardından Delivery domain'ine gönderilir. BiSU tarafında YS siparişlerine ait iki ayrı sipariş numarası kaydı kullanılmaktadır. YS API'si üzerinde işlem yapabilmek için YS'deki order_id değeri BiSU tarafında packageId (Biri_Integration_Order_Map tablosu) olarak tutulmaktadır. YS-BiSU Müşteri Hizmetleri arasında iletişim kurulabilmesi için ise external_order_id değeri kullanılmaktadır. Bu değer integrationOrderNumber (Biri_Integration_Order_Map tablosu) olarak tutulmaktadır.