xforge · tài liệu FE

FE: module coupon — mã giảm giá (ADR-0073 đợt 3) #

Phần chung (khởi tạo client, lỗi, danh sách, ngôn ngữ) ở tài liệu FE của Core: docs/fe/common.md (bản đọc: xforge-documentation, ADR-0102 của xforge-core). Sửa file này CÙNG PR khi đổi hành vi FE thấy được của module.

CMS / admin (XforgeClient) #

Menu: key coupon.coupons (quyền coupon.read). Bộ route CRUD chuẩn: listCoupons, getCoupon, createCoupon, updateCoupon (sửa một phần), replaceCoupon, deleteCoupon (thùng rác; ?force=true xoá hẳn, cần coupon.hard_delete), restoreCoupon, listCouponTrash, listCouponOptions.

FieldGhi chú
codechữ, số, _ . -; server lưu CHỮ HOA; duy nhất trong store
discountTypepercent (discountValue là phần trăm, tối đa 100) hoặc fixed (số tiền)
maxDiscounttrần số tiền giảm, chỉ cho percent
minSubtotaltiền hàng tối thiểu (sau CTKM, trước thuế)
startsAtendsAt — ISO UTC; null = không giới hạn
usageLimittổng lượt; perCustomerLimit lượt mỗi khách (khách phải đăng nhập); null = không
customerIdmã riêng của một khách (phải là khách của store)
productIdsmã chỉ giảm các sản phẩm này (giảm theo dòng); rỗng = cả đơn

Tiền tệ của mã là tiền tệ của store lúc tạo. Response có redeemedCount (lượt trên đơn chưa huỷ), customerInfo, products: [{ productId, productInfo }]. Luật chéo field sai (phần trăm trên 100, maxDiscount cho fixed, endsAt trước startsAt) → 400 validation_failed (rule: check).

Gỡ khách khỏi store (unlinkCustomer) hoặc xoá khách thì mã riêng của khách đó ở store tự tắt (active: false); customerInfo của mã riêng là null khi khách không còn là khách của store (customerId vẫn giữ). Bật lại mã riêng cần khách vẫn là khách của store (khách đăng nhập lại ở store là được), không thì 400 validation_failed ở customerId.

Storefront #

Không có route riêng: khách nhập mã vào giỏ (setMyCartCodes, trang module cart). Mỗi đơn MỘT mã giảm giá. Giỏ và chốt đơn có khoản giảm trong adjustments (source: "coupon", code, scope order hoặc line).

Màn hình dựng sẵn #

listMenu() → mục coupon.coupons có screen (type: "crud"): CMS chung vẽ được từ getMenuScreen({ params: { key: "coupon.coupons" } }) mà không cần code riêng (tài liệu FE của Core: cms.md §3.1). Có: danh sách (mã, tên, kiểu, mức giảm, khách, hiệu lực, đã dùng, đang dùng; tìm; lọc trạng thái / khách), form tạo / sửa, xoá, thùng rác + khôi phục.

Nguồn: xforge-modules: modules/marketing/coupon/FE.md