Delivery (Biteship)
Delivery adalah Biteship. Backend mengambil rate courier, membuat draft shipment, dan melacaknya; storefront hanya menampilkan opsi courier yang dikembalikan backend.
Cara halaman ini diverifikasi
Dibaca pada 2026-09-15 dari module deliveries backend.
Backend
Module deliveries memiliki tabel deliveries (plus model non-entity couriers / shipping-methods). Ia REST-only (tidak ada di include GraphQL).
DeliveriesService (src/deliveries/services/deliveries.service.ts) adalah client Biteship. Base URL DELIVERY_BITESHIP_BASE_URL, Bearer DELIVERY_BITESHIP_API_KEY. Origin (gudang) datang dari DELIVERY_WAREHOUSE_ZIPCODE dan var DELIVERY_ORIGIN_*; courier yang tersedia dari DELIVERY_COURIER_AVAILABLE. Endpoint yang dipanggilnya:
/v1/couriers,/v1/rates/couriers— opsi dan harga courier (dipakaifrontCourierssaat checkout)./v1/draft_ordersdan/v1/draft_orders/:id/confirm— membuat dan mengonfirmasi shipment./v1/trackings/:id— tracking.
Draft dibuat selama createOrder() (lihat Cart and checkout).
Callback tracking
webhook-deliveries.service.ts handleEvent memetakan status tracking Biteship ke state delivery shipped / delivered; saat delivered ia mengeset order ke completed (lihat Orders). Route masuknya adalah webhooks/deliveries; di production callback tiba lewat webhook receiver → SNS.
Storefront
Customer memilih courier di checkout lewat frontCouriers(memberCartId) (name, code, service, price, duration) lalu frontUpdateCartCourier (src/modules/shipping/components/shipping-form.tsx, src/lib/shipping/). Biteship tidak pernah disebut di frontend — opsinya adalah apa pun yang dikembalikan backend.
Hal yang perlu diwaspadai
- Rate bergantung pada env origin.
DELIVERY_ORIGIN_*atauDELIVERY_WAREHOUSE_ZIPCODEyang salah memberi opsi courier yang salah atau kosong. - Di dev, Biteship adalah simulator, yang bisa memaksa
/v1/draft_ordersjadi 500 — jadi order yang gagal di langkah delivery di dev bisa jadi toggle-nya.