Skip to main content

Servis Seçimi

YS Mahalle entegrasyonunda Market ve Su kategorileri altında farklı depo tanımlamaları ve webhook tanımlamaları mevcuttur. Aynı depo için iki adet depo tanımlaması olduğundan Yemeksepeti servislerine çıkılırken bu depo numaralarına göre auth bilgileri değişmek zorundadır. Bu sebeple hangi storeId'nin hangi servise (market/su) ait olduğunu tespit edebilmek için Yemeksepeti_Service_Map (kısaca YSM) tablosu oluşturulmuştur. YS'deki storeId ile YS'deki servis eşleştirilmiştir ve bu kayıtlara göre YS API'lerine istek çıkılmaktadır. Bu tabloya girilen bilgiler Redis'te de saklanmaktadır. Redis'te yemeksepetiServiceMap hash'inin bir hata durumunda kontrol edilmesi gerekir.

Yeni bir depo tanımlanırken mutlaka YSM tablosuna servis bilgisi girilmelidir. Aksi halde istek yanlış API'e atılacağından 403 hatası alınacaktır.

Kod tarafında hangi servise çıkılacağının tespiti axios adapter'ine bağlı request interceptor'inin içinde isteği atarken kullandığımız extraInfo objesindeki orderId veya vendorId'deki değere göre belirlenip Authorization header'i manipüle edilmektedir.

Sipariş üzerinde işlem yapılması gerekiyorsa extraInfo objesinin içinde orderId, ürün üzerinde işlem yapılması gerekiyorsa vendorId değerinin verilmesi gerekmektedir.

Örnek olarak order_id parametresine göre sipariş gövdesini çektiğimiz servisin kodu şu şekildedir:

async getOrderByOrderId(orderId) {
return this.axiosInstance({
url: `${this.ORDER_BASEURL}/v1/orders/${orderId}`,
method: 'GET',
metadata: new AxiosIntegrationMetadata({
useLogging: false,
vendor: integrationConstants.vendors.YEMEKSEPETI,
operationName: 'getOrderByOrderId',
reason: 'getOrderByOrderId',
extraInfo: { orderId } // This is the way
})
});
}

Burada extraInfo objesindeki orderId'e göre Authorization değeri değiştirilmektedir.