Skip to content

Orders

Hidup sebuah order setelah checkout, alur status-nya, dan di mana ketiga third party menggerakkannya.

Cara halaman ini diverifikasi

Dibaca pada 2026-09-15 dari module orders backend (service, cron, resolver), storefront /user/my-order, dan admin /admin/orders (view only).

Model dan status

Tabel: orders, order_items, order_addresses. Nilai status (utils/order-status.const.ts):

StatusArti
pending_paymentdibuat, menunggu customer membayar
processingsudah dibayar (DOKU success), sedang disiapkan
shippeddiserahkan ke courier / dipilih oleh WMS
completedterkirim
canceleddibatalkan (oleh customer, atau kedaluwarsa belum dibayar)

Apa yang memindahkan order antar status

Order dibuat pending_payment oleh createOrder() (lihat Cart and checkout). Setelah itu, ketiga third party yang menggerakkannya — masing-masing lewat webhook masuknya:

  • DOKUwebhook-payments.service.ts: pada transaction.status === 'SUCCESS' order berpindah ke processing.
  • WMSwebhook-wms.service.ts: event sales-order WMS yang masuk memindahkan order ke shipped (delivery processing).
  • Biteshipwebhook-deliveries.service.ts: memetakan tracking Biteship ke delivery shipped / delivered; saat delivered order berpindah ke completed.

Lihat Third parties untuk cara callback tiba.

Expiry cron

OrdersCronService.handleOrderPaymentExpiry (src/orders/services/orders-cron.service.ts) berjalan setiap menit. Ia mencari order pending_payment yang lewat paymentExpiredAt, mengecek ulang status DOKU, dan membatalkan yang kedaluwarsa — membatalkan order WMS dan draft Biteship juga. Ini satu-satunya cron di backend.

Resolver

  • CMS (orders.resolver): orders, order, orderTransactionMetrics.
  • Storefront (storefront-orders.resolver): frontMemberOrders(search, status), frontMemberOrder(orderId), frontCancelMemberOrder(orderId).
  • REST (controller orders): export GET excel, endpoint test-email, dan endpoint fix fix/update-order-wms-status/:orderId.

Storefront

/user/my-order (src/app/user/my-order/page.tsx) — riwayat order dengan tab ?status= (mis. pending_payment). UI di src/modules/my-order/components/ (item, detail, tab status, badge status, search). "Pay again" membuka ulang DOKU dari detail order. Cancel memanggil frontCancelMemberOrder.

Admin

/admin/orders adalah view only — list page.tsx dan detail [slug]. src/lib/orders/index.ts hanya punya query orders dan order, tanpa mutation, jadi perubahan status tidak terhubung di admin; webhook yang menggerakkannya.

Hal yang perlu diwaspadai

  • Admin tidak bisa mengubah status order. Status mengalir dari webhook, bukan dari tombol.
  • Prefix nomor order adalah EXSPORT_ORDER_NO_PREFIX; email notifikasi dijaga oleh EXSPORT_ORDER_SHOULD_SEND_NOTIF_EMAIL.