@wishcbg/bobcode
Version:
基於店家同步功能的需求,讓店家能夠在不同的店家之間同步各項功能設定,並且能夠檢視各項功能的異動情況。 規劃出一套店家設定即程式碼的機制,讓店家能夠以 config file (.sac) 來定義各項功能設定,並且能夠還原店家各項功能設定。 暫且稱這個機制為「Settings as Code」「店家設定即程式碼」。
276 lines (275 loc) • 8.27 kB
TypeScript
import { z } from 'zod';
import { BaseResourceSchema } from './base.js';
declare const resourceItemResourceSettingSchema: z.ZodObject<{
enabled: z.ZodBoolean;
name: z.ZodString;
bookingMax: z.ZodNumber;
enableTimeOff: z.ZodDefault<z.ZodBoolean>;
businessTimeBy: z.ZodEnum<["shop", "branch"]>;
timeOffConfig: z.ZodOptional<z.ZodObject<{
months: z.ZodDefault<z.ZodArray<z.ZodNumber, "many">>;
weekdays: z.ZodDefault<z.ZodArray<z.ZodNumber, "many">>;
dateRangeSettings: z.ZodDefault<z.ZodArray<z.ZodObject<{
start: z.ZodDate;
end: z.ZodDate;
}, "strip", z.ZodTypeAny, {
start: Date;
end: Date;
}, {
start: Date;
end: Date;
}>, "many">>;
timeRangeSettings: z.ZodDefault<z.ZodArray<z.ZodObject<{
start: z.ZodDate;
end: z.ZodDate;
}, "strip", z.ZodTypeAny, {
start: Date;
end: Date;
}, {
start: Date;
end: Date;
}>, "many">>;
}, "strip", z.ZodTypeAny, {
months: number[];
weekdays: number[];
dateRangeSettings: {
start: Date;
end: Date;
}[];
timeRangeSettings: {
start: Date;
end: Date;
}[];
}, {
months?: number[] | undefined;
weekdays?: number[] | undefined;
dateRangeSettings?: {
start: Date;
end: Date;
}[] | undefined;
timeRangeSettings?: {
start: Date;
end: Date;
}[] | undefined;
}>>;
excludeTimeRules: z.ZodOptional<z.ZodArray<z.ZodObject<{
type: z.ZodEnum<["once", "weekly", "monthly", "yearly"]>;
onceSetting: z.ZodOptional<z.ZodObject<{
startAt: z.ZodDate;
endAt: z.ZodDate;
}, "strip", z.ZodTypeAny, {
startAt: Date;
endAt: Date;
}, {
startAt: Date;
endAt: Date;
}>>;
weeklySetting: z.ZodOptional<z.ZodObject<{
week: z.ZodNumber;
startTime: z.ZodNumber;
endTime: z.ZodNumber;
}, "strip", z.ZodTypeAny, {
week: number;
startTime: number;
endTime: number;
}, {
week: number;
startTime: number;
endTime: number;
}>>;
monthlySetting: z.ZodOptional<z.ZodObject<{
startDay: z.ZodNumber;
startTime: z.ZodNumber;
endDay: z.ZodNumber;
endTime: z.ZodNumber;
}, "strip", z.ZodTypeAny, {
startTime: number;
endTime: number;
startDay: number;
endDay: number;
}, {
startTime: number;
endTime: number;
startDay: number;
endDay: number;
}>>;
yearlySetting: z.ZodOptional<z.ZodObject<{
startMonth: z.ZodNumber;
startDay: z.ZodNumber;
startTime: z.ZodNumber;
endMonth: z.ZodNumber;
endDay: z.ZodNumber;
endTime: z.ZodNumber;
}, "strip", z.ZodTypeAny, {
startTime: number;
endTime: number;
startDay: number;
endDay: number;
startMonth: number;
endMonth: number;
}, {
startTime: number;
endTime: number;
startDay: number;
endDay: number;
startMonth: number;
endMonth: number;
}>>;
}, "strip", z.ZodTypeAny, {
type: "once" | "weekly" | "monthly" | "yearly";
onceSetting?: {
startAt: Date;
endAt: Date;
} | undefined;
weeklySetting?: {
week: number;
startTime: number;
endTime: number;
} | undefined;
monthlySetting?: {
startTime: number;
endTime: number;
startDay: number;
endDay: number;
} | undefined;
yearlySetting?: {
startTime: number;
endTime: number;
startDay: number;
endDay: number;
startMonth: number;
endMonth: number;
} | undefined;
}, {
type: "once" | "weekly" | "monthly" | "yearly";
onceSetting?: {
startAt: Date;
endAt: Date;
} | undefined;
weeklySetting?: {
week: number;
startTime: number;
endTime: number;
} | undefined;
monthlySetting?: {
startTime: number;
endTime: number;
startDay: number;
endDay: number;
} | undefined;
yearlySetting?: {
startTime: number;
endTime: number;
startDay: number;
endDay: number;
startMonth: number;
endMonth: number;
} | undefined;
}>, "many">>;
order: z.ZodOptional<z.ZodNumber>;
image: z.ZodOptional<z.ZodString>;
appointmentServiceLogicIds: z.ZodArray<z.ZodString, "many">;
resourceItemCategoryLogicIds: z.ZodArray<z.ZodString, "many">;
businessTimeBranchLogicId: z.ZodString;
}, "strip", z.ZodTypeAny, {
name: string;
appointmentServiceLogicIds: string[];
enabled: boolean;
bookingMax: number;
enableTimeOff: boolean;
businessTimeBy: "shop" | "branch";
resourceItemCategoryLogicIds: string[];
businessTimeBranchLogicId: string;
order?: number | undefined;
image?: string | undefined;
timeOffConfig?: {
months: number[];
weekdays: number[];
dateRangeSettings: {
start: Date;
end: Date;
}[];
timeRangeSettings: {
start: Date;
end: Date;
}[];
} | undefined;
excludeTimeRules?: {
type: "once" | "weekly" | "monthly" | "yearly";
onceSetting?: {
startAt: Date;
endAt: Date;
} | undefined;
weeklySetting?: {
week: number;
startTime: number;
endTime: number;
} | undefined;
monthlySetting?: {
startTime: number;
endTime: number;
startDay: number;
endDay: number;
} | undefined;
yearlySetting?: {
startTime: number;
endTime: number;
startDay: number;
endDay: number;
startMonth: number;
endMonth: number;
} | undefined;
}[] | undefined;
}, {
name: string;
appointmentServiceLogicIds: string[];
enabled: boolean;
bookingMax: number;
businessTimeBy: "shop" | "branch";
resourceItemCategoryLogicIds: string[];
businessTimeBranchLogicId: string;
order?: number | undefined;
image?: string | undefined;
enableTimeOff?: boolean | undefined;
timeOffConfig?: {
months?: number[] | undefined;
weekdays?: number[] | undefined;
dateRangeSettings?: {
start: Date;
end: Date;
}[] | undefined;
timeRangeSettings?: {
start: Date;
end: Date;
}[] | undefined;
} | undefined;
excludeTimeRules?: {
type: "once" | "weekly" | "monthly" | "yearly";
onceSetting?: {
startAt: Date;
endAt: Date;
} | undefined;
weeklySetting?: {
week: number;
startTime: number;
endTime: number;
} | undefined;
monthlySetting?: {
startTime: number;
endTime: number;
startDay: number;
endDay: number;
} | undefined;
yearlySetting?: {
startTime: number;
endTime: number;
startDay: number;
endDay: number;
startMonth: number;
endMonth: number;
} | undefined;
}[] | undefined;
}>;
export type IResourceItemResourceSettingSchema = z.infer<typeof resourceItemResourceSettingSchema>;
export declare const ResourceItemResourceSchema: BaseResourceSchema<typeof resourceItemResourceSettingSchema>;
export {};