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) danfront*:frontVouchers,frontValidateVoucherCode. Create/update dengan image lewat REST (controllervouchers), 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/vouchersdengan tiga pasang add/edit:add/edit-voucher,-free-shipping-voucher,-first-time-purchase-voucher. Perhatikan foldernya diejavourchersdisrc/libdansrc/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) dandiscount-types. Dashboard lewat REST. - Storefront — tier discount ditampilkan di PDP (
src/modules/product-details/components/product-tier-discount.tsx); perhitungan discount disrc/context/cart-context.tsx. - Admin —
/admin/discountsdengan 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) danfront*:activeFlashSale. - Storefront — listing
/flash-saledan 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_discountsadalah catatan apa yang benar-benar diterapkan — baca ini saat total terlihat salah, bukan hanya definisi discount.