UNPKG

@wishcbg/bobcode

Version:

基於店家同步功能的需求,讓店家能夠在不同的店家之間同步各項功能設定,並且能夠檢視各項功能的異動情況。 規劃出一套店家設定即程式碼的機制,讓店家能夠以 config file (.sac) 來定義各項功能設定,並且能夠還原店家各項功能設定。 暫且稱這個機制為「Settings as Code」「店家設定即程式碼」。

57 lines (56 loc) 2.38 kB
"use strict"; 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', };