Skip to content

Promotions

Voucher, discount dan flash sale. Ketiganya satu backend module (promotions) dan tiga area admin. Storefront menerapkannya saat checkout dan di halaman product.

Cara halaman ini diverifikasi

Dibaca pada 2026-09-15 dari backend module promotions dan area admin /admin/vouchers, /admin/discounts, /admin/flash-sales.

Vouchers

Voucher yang diketik customer. Jenis (voucher_types): regular, free-shipping, first-time-purchase. Sebuah voucher bisa dibatasi menurut product, courier, payment method, dan special code — karena itu ada child table voucher_regular_products, voucher_free_shipping_products, voucher_free_shipping_couriers, voucher_first_time_purchase_products, voucher_couriers, voucher_payment_methods, voucher_special_codes, voucher_images.

  • Backend — resolver vouchers (list/get, payment-methods, couriers, dashboard + performance, delete per jenis) dan front*: frontVouchers, frontValidateVoucherCode. Create/update dengan image lewat REST (controller vouchers), plus seed endpoint untuk types / payment-methods / shipping-couriers dan export Excel special-codes.
  • Storefront — diterapkan saat checkout (src/modules/shipping/components/vouchers-form.tsx, src/lib/vouchers/).
  • Admin/admin/vouchers dengan tiga pasang add/edit: add/edit-voucher, -free-shipping-voucher, -first-time-purchase-voucher. Perhatikan foldernya dieja vourchers di src/lib dan src/modules — tulis apa adanya.

Discounts

Discount yang diterapkan otomatis (tidak diketik customer). Jenis (discount_types): regular, bundle, gift, tier. Child table: discount_regular_products, discount_bundle_products (+ bundleds), discount_gift_products (+ gifts), discount_tier_levels, discount_tier_products, dan order_discounts mencatat apa yang diterapkan ke sebuah order.

  • Backend — resolver discounts (discounts, discount, dashboard, create/update/delete untuk regular/bundle/gift/tier) dan discount-types. Dashboard lewat REST.
  • Storefront — tier discount ditampilkan di PDP (src/modules/product-details/components/product-tier-discount.tsx); perhitungan discount di src/context/cart-context.tsx.
  • Admin/admin/discounts dengan pasangan add/edit untuk discount regular, bundle dan tier.

Flash sales

Sale berbatas waktu untuk sekumpulan product. Tabel flash_sales, flash_sales_products.

  • Backend — resolver flash-sales (CRUD + dashboard) dan front*: activeFlashSale.
  • Storefront — listing /flash-sale dan banner flash-sale di PDP (product-detail-flash-sale-banner.tsx).
  • Admin/admin/flash-sales (add, edit).

Hal yang perlu diwaspadai

  • Voucher vs discount: voucher diketik customer dan divalidasi (frontValidateVoucherCode); discount berlaku sendiri. Jangan dicampur.
  • Create-with-image lewat REST. Create/update voucher dan discount yang membawa image mem-post multipart, bukan GraphQL.
  • order_discounts adalah catatan apa yang benar-benar diterapkan — baca ini saat total terlihat salah, bukan hanya definisi discount.