@ bondsports/在线预订
在线订票流程的验证和设置分辨率工具.
软件包回答了两个问题:
- 现在对该用户适用什么预订设置? —— 说
resolveBookingSettings将默认产品类设置与用户活动成员中最有利的覆盖合并. - 用户想要预订的插槽是否实际允许 ? —— 说
validateBookingSlots对照已解析的设置检查请求的插槽( 与用户已订入的插槽合并)并返回打入的验证结果 .
安装
npm install @bondsports/online-booking
使用量
resolveBookingSettings
选择有效 IBookingSettings 用于用户。 如果用户没有活动成员(或者没有一个成员推翻类别设置),则返回默认值. 否则是最低的 minimumBookingNotice 和最高 advanceBookingWindow 超越会员的优势.
import { resolveBookingSettings } from '@bondsports/online-booking';
const settings = resolveBookingSettings(productCategory.onlineBookingSettings, user.activeMemberships);
productCategory.onlineBookingSettings—— 说TProductCategoryOnlineBookingSettings(单位:千美元){ default, memberships }(中文(简体) )user.activeMemberships—— 说{ membershipId: number }[](可选;通过)undefined或者说[](给客人)
validateBookingSlots
对照已解析的设置验证请求的时段列表 .
import { validateBookingSlots } from '@bondsports/online-booking';
const result = validateBookingSlots(requestedSlots, userBookedSlots, settings, facilityTimezone);
if (!result.success) {
// result.error is a ValidationError with a stable `code` (see ONLINE_BOOKING_ERRORS)
throw result.error;
}
验证符 :
- 将所请求的插槽与用户现有的订位( 密闭到订位窗口) 合并 ,
- 执行
maxBookingHours每个日历日(设施时区), - 执行
maxSequentialBookings每个连续的街道, - 执行
minimumBookingNotice财务报告和审定财务报表advanceBookingWindow反对"现在".
处理错误
所有失败返回 { success: false, error } 地点 error 是一个 ValidationError 带稳定器的子级 code 从 ONLINE_BOOKING_ERRORS数字 :
| 错误类 | 代码 | 含义 |
|---|---|---|
InvalidTimesError | INVALID_TIMES | 开始日期不严格在结束日期之前 |
MinimumNoticeError | MINIMUM_NOTICE_DATE | 开始日期是之前 now + minimumBookingNotice |
AdvanceBookingError | ADVANCE_BOOKING_DATE | 开始日期超过 now + advanceBookingWindow |
MaxSequentialHoursError | MAX_SEQUENTIAL_HOURS | 毗连区块超过 maxSequentialBookings |
MaxBookingHoursError | MAX_BOOKING_HOURS | 超过一天的预订时间总数 maxBookingHours |
import { ONLINE_BOOKING_ERRORS, ValidationError } from '@bondsports/online-booking';
if (!result.success && result.error.code === ONLINE_BOOKING_ERRORS.MINIMUM_NOTICE_DATE) {
// show "book at least N hours in advance" message
}
API 密码
import {
validateBookingSlots,
resolveBookingSettings,
ONLINE_BOOKING_ERRORS,
ValidationError,
InvalidTimesError,
MinimumNoticeError,
AdvanceBookingError,
MaxSequentialHoursError,
MaxBookingHoursError,
IBookingValidation,
IBookingSettings,
IMembershipBookingSettings,
TProductCategoryOnlineBookingSettings,
} from '@bondsports/online-booking';
脚本
npm run build # compile to ./dist
npm test # run jest
npm run lint # eslint + prettier check
npm run lint:fix # autofix