@wishcbg/bobcode
Version:
基於店家同步功能的需求,讓店家能夠在不同的店家之間同步各項功能設定,並且能夠檢視各項功能的異動情況。 規劃出一套店家設定即程式碼的機制,讓店家能夠以 config file (.sac) 來定義各項功能設定,並且能夠還原店家各項功能設定。 暫且稱這個機制為「Settings as Code」「店家設定即程式碼」。
62 lines (61 loc) • 4.68 kB
JavaScript
"use strict";
Object.defineProperty(exports, "__esModule", { value: true });
exports.AppointmentConfigResourceSchema = void 0;
const zod_1 = require("zod");
// enums 參考 config
const notSpecifyOrderRules = ['first', 'last'];
const notSpecifyRules = ['order', 'reservation', 'notSpecifyReservation', 'random'];
const secondOrderStartDefaults = ['continue', 'same'];
const pageStyles = ['beauty', 'ohbot'];
const appointmentConfigClientOrderModes = ['normal', 'otherReservation', 'batchOrder'];
const appointmentConfigChargeTypes = ['none', 'deposit', 'checkout'];
const appointmentConfigBatchOrderNotifyModes = ['merge', 'independent'];
const appointmentConfigOrderServiceAttachClientNullOptionPositions = ['first', 'last'];
const appointmentConfigResourceSettingSchema = zod_1.z.object({
timeUnit: zod_1.z.number().int().min(10).optional().describe('預約時間單位,單位為分鐘'),
timeUnitOffset: zod_1.z.number().int().min(0).optional().describe('預約時間單位偏移量,單位為分鐘'),
minReservationInterval: zod_1.z.number().int().optional().describe('最早可預約時間,單位為分鐘(-1為不限制)'),
maxReservationInterval: zod_1.z.number().int().optional().describe('最晚可預約時間,單位為分鐘(-1為不限制)'),
cancelInterval: zod_1.z.number().int().optional().describe('預約最晚可取消時間,單位為分鐘'),
useNotSpecify: zod_1.z.boolean().optional().describe('是否啟用不指定人員'),
notSpecifyOrderRule: zod_1.z.enum(notSpecifyOrderRules).optional().describe('不指定人員顯示排序方式'),
notSpecifySkipUnit: zod_1.z.boolean().optional().describe('不指定人員時是否跳過選擇服務人員'),
notSpecifyName: zod_1.z.string().optional().describe('不指定人員顯示名稱'),
notSpecifyRule: zod_1.z.enum(notSpecifyRules).optional().describe('不指定人員安排規則'),
pageStyle: zod_1.z.enum(pageStyles).optional().describe('預約頁面樣式'),
pageText: zod_1.z.record(zod_1.z.string()).optional().describe('預約頁面替換文字'),
clientOrderMode: zod_1.z.enum(appointmentConfigClientOrderModes).optional().describe('Client預約流程模式'),
allowOrderMorePeople: zod_1.z.boolean().optional().describe('是否允許多人預約'),
maxOrderMorePeopleCount: zod_1.z.number().int().min(0).max(10).optional().describe('最大多人預約人數'),
allowOtherReservation: zod_1.z.boolean().optional().describe('是否允許其他預約'),
secondOrderStartDefault: zod_1.z.enum(secondOrderStartDefaults).optional().describe('其他預約默認開始時間方式(接續、同時)'),
secondOrderStartClientChange: zod_1.z.boolean().optional().describe('是否允許客戶修改其他預約開始時間'),
orderServiceAttachClientCheck: zod_1.z.boolean().optional().describe('是否顯示附加服務客戶確認'),
orderServiceAttachClientNullOption: zod_1.z.boolean().optional().describe('客戶是否有不選擇附加服務的選項'),
orderServiceAttachClientNullOptionPosition: zod_1.z.enum(appointmentConfigOrderServiceAttachClientNullOptionPositions).optional().describe('客戶是否有不選擇附加服務的選項位置'),
orderServiceAttachClientMultipleSelection: zod_1.z.boolean().optional().describe('客戶是否可以多選附加服務'),
enableUserAddress: zod_1.z.boolean().optional().describe('是否啟用預約地址'),
orderSystemCommentTemplate: zod_1.z.string().optional().describe('預約訂單系統備註文字樣板'),
chargeType: zod_1.z.enum(appointmentConfigChargeTypes).optional().describe('收款模式'),
allowBatchOrder: zod_1.z.boolean().optional().describe('是否啟用批次預約'),
batchOrderNotifyMode: zod_1.z.enum(appointmentConfigBatchOrderNotifyModes).optional().describe('批次預約通知模式'),
// append fields
notSpecifyImageLogicId: zod_1.z.string().uuid().optional().describe('不指定人員圖片ID'),
notSpecifyUnitLogicIds: zod_1.z.array(zod_1.z.string()).optional().describe('不指定人員綁定ID'),
}).describe('預約模組設定');
// 改成export一個 config 而不是class
exports.AppointmentConfigResourceSchema = {
// —— 基本欄位
resourceType: 'appointmentConfig',
resourceName: '預約模組設定',
resourceSettingSchema: appointmentConfigResourceSettingSchema,
// —— 關聯
relationScope: 'shop',
relationType: 'single',
relationResources: [],
// —— apply API path
applySingleUpdateApiPath: '/:shopId/appointmentConfig',
applyCreateApiPath: null,
applyUpdateApiPath: null,
applyDestroyApiPath: null,
};