@wishcbg/bobcode
Version:
基於店家同步功能的需求,讓店家能夠在不同的店家之間同步各項功能設定,並且能夠檢視各項功能的異動情況。 規劃出一套店家設定即程式碼的機制,讓店家能夠以 config file (.sac) 來定義各項功能設定,並且能夠還原店家各項功能設定。 暫且稱這個機制為「Settings as Code」「店家設定即程式碼」。
57 lines (56 loc) • 2.38 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.LotteryAwardResourceSchema = exports.lotteryAwardResourceSettingSchema = void 0;
const zod_1 = require("zod");
const awardTypes = ['coin', 'coupon', 'cashback', 'point', 'miss'];
const awardSchema = zod_1.z.object({
type: zod_1.z.enum(awardTypes).describe('獎品類型'),
amount: zod_1.z.number().int().min(1).optional().describe('獎品數量'),
couponLogicId: zod_1.z.string().uuid().optional().describe('優惠券ID'),
// 這個要想一下
shopPointKey: zod_1.z.string().optional().describe('點數服務 key(system)'),
});
exports.lotteryAwardResourceSettingSchema = zod_1.z.object({
name: zod_1.z.string().describe('獎項名稱'),
availableStock: zod_1.z.number().int().describe('獎項庫存'),
showAvailableStock: zod_1.z.boolean().describe('是否顯示庫存'),
unlimitedStock: zod_1.z.boolean().describe('是否無限庫存'),
award: awardSchema.describe('獎品'),
imageId: zod_1.z.string().uuid().optional().describe('圖片ID'),
// 特殊案例
lotteryLogicId: zod_1.z.string().uuid().describe('抽獎活動ID'),
}).describe('抽獎獎項設定');
// 改成export一個 config 而不是class
exports.LotteryAwardResourceSchema = {
// —— 基本欄位
resourceType: 'lotteryAward',
resourceName: '抽獎獎項設定',
resourceSettingSchema: exports.lotteryAwardResourceSettingSchema,
// —— 關聯
relationScope: 'shop',
relationType: 'multi',
relationResources: [
{
resourceType: 'coupon',
useLogicIdToResourceId: true,
settingSchemaField: 'award.couponLogicId',
logicIdToResourceIdNewField: 'award.couponId',
relationType: 'single',
acceptsNullValue: false,
},
{
resourceType: 'image',
useLogicIdToResourceId: false,
settingSchemaField: 'imageId',
logicIdToResourceIdNewField: 'imageId',
relationType: 'single',
acceptsNullValue: false,
},
],
// —— apply API path
// toDo url 調整
applySingleUpdateApiPath: null,
applyCreateApiPath: '/:shopId/lotteryAward',
applyUpdateApiPath: '/:shopId/lotteryAward/:resourceId',
applyDestroyApiPath: '/:shopId/lotteryAward/:resourceId',
};