UNPKG

@wishcbg/bobcode

Version:

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

94 lines (93 loc) 5.34 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.CouponResourceSchema = exports.couponResourceSettingSchema = void 0; const zod_1 = require("zod"); const couponTypes = ['coupon', 'exchange']; const couponExpTypes = ['expAt', 'expDay', 'endOfPeriod']; const couponEndOfPeriodUnits = ['day', 'week', 'month', 'quarter', 'year']; const couponExchangeTypes = ['share', 'single']; const extraStatusSchema = zod_1.z.object({ opentixEcouponId: zod_1.z.string().describe('opentix 票券 ID').optional(), opentixIsDisabled: zod_1.z.boolean().describe('opentix 是否停用').optional(), pospalEcouponId: zod_1.z.string().describe('pospal 票券 ID').optional(), pospalIsDisabled: zod_1.z.boolean().describe('pospal 是否停用').optional(), }).optional(); const openTixConfigSchema = zod_1.z.object({ startTime: zod_1.z.coerce.date().describe('開始時間'), endTime: zod_1.z.coerce.date().describe('結束時間'), currentDiscount: zod_1.z.number().optional().describe('折數'), currentPrice: zod_1.z.number().optional().describe('折抵金額'), quantityPerMember: zod_1.z.number().describe('每位會員張數限制'), priceMinLimit: zod_1.z.number().optional().describe('最低消費金額'), priceMaxLimit: zod_1.z.number().optional().describe('最高消費金額'), description: zod_1.z.string().optional().describe('描述'), note: zod_1.z.string().optional().describe('備註'), organizers: zod_1.z.array(zod_1.z.string()).describe('限定主辦單位(主辦單位代碼)'), programs: zod_1.z.array(zod_1.z.string()).describe('限定節目(節目代碼)'), events: zod_1.z.array(zod_1.z.string()).describe('限定場次(場次代碼)'), }).describe('opentix 票券設定'); const posPalConfigSchema = zod_1.z.object({ couponDataHash: zod_1.z.string().describe('hash 物件用來比對不同'), startDate: zod_1.z.coerce.date().describe('開始時間'), endDate: zod_1.z.coerce.date().describe('結束時間'), description: zod_1.z.string().optional().describe('描述'), beginDays: zod_1.z.number().describe('發放後幾天生效'), avaliableDays: zod_1.z.number().describe('發放後有效天數'), avaliableQuantity: zod_1.z.number().describe('可用數量'), usedQuantity: zod_1.z.number().describe('已用數量'), createdQuantity: zod_1.z.number().describe('創建數量'), usageLimitType: zod_1.z.string().optional().describe('使用限制類型'), usageLimitTimes: zod_1.z.number().describe('使用限制次數'), usageLimitAmountType: zod_1.z.boolean().optional().describe('是否使用限制金額'), usageLimitAmount: zod_1.z.number().describe('使用限制金額'), makeStartDate: zod_1.z.coerce.date().describe('製卷開始時間'), makeEndDate: zod_1.z.coerce.date().describe('製卷結束時間'), }).describe('pospal 票券設定'); const extraSettingSchema = zod_1.z.object({ openTixConfig: openTixConfigSchema.optional(), posPalConfig: posPalConfigSchema.optional(), }).optional(); exports.couponResourceSettingSchema = zod_1.z.object({ type: zod_1.z.enum(couponTypes).describe('票券類型'), name: zod_1.z.string().describe('票券名稱'), expType: zod_1.z.enum(couponExpTypes).default('expDay').describe('到期類型'), expDay: zod_1.z.number().int().optional().describe('固定天數:到期天數'), expAt: zod_1.z.date().optional().describe('固定日期:到期日期'), endOfPeriodUnit: zod_1.z.enum(couponEndOfPeriodUnits).optional().describe('當期結束單位'), showMinute: zod_1.z.number().int().optional().describe('使用後顯示時間(分鐘)'), notice: zod_1.z.string().optional().describe('注意事項'), exchangeLink: zod_1.z.string().optional().describe('兌換券外部連結'), exchangeType: zod_1.z.enum(couponExchangeTypes).optional().describe('兌換碼種類設定(設定用)'), systemRedeem: zod_1.z.boolean().default(false).describe('系統兌換(是否立即核銷設定)'), sentCount: zod_1.z.number().int().default(0).describe('已發送數量'), firstSentLimit: zod_1.z.number().int().optional().describe('第一次設定發送上限(null 為無限制)'), sentLimit: zod_1.z.number().int().optional().describe('發送上限(null 為無限制)'), extraStatus: extraStatusSchema, extraSetting: extraSettingSchema, imageId: zod_1.z.string().describe('預約類別圖片ID').optional(), }).describe('票券設定'); // 改成export一個 config 而不是class exports.CouponResourceSchema = { // —— 基本欄位 resourceType: 'coupon', resourceName: '票券設定', resourceSettingSchema: exports.couponResourceSettingSchema, // —— 關聯 relationScope: 'shop', relationType: 'multi', relationResources: [ { resourceType: 'image', useLogicIdToResourceId: false, settingSchemaField: 'imageId', logicIdToResourceIdNewField: 'image', relationType: 'single', acceptsNullValue: false, }, ], // —— apply API path applySingleUpdateApiPath: null, applyCreateApiPath: '/:shopId/coupon', applyUpdateApiPath: '/:shopId/coupon/:resourceId', applyDestroyApiPath: '/:shopId/coupon/:resourceId', };