Appearance
每个国家和地区都有其特殊的节假日。我们采用Holidaytable按其地区的标准节假日初始化。用户可以在此基础上修改。
每个节假日的安排都是在分店(Location)层面
初始化节假日
在分店初始化时,我们可以调用populateHolidays初始化节假日。它采用了date-holidayspackage获取标准的节假日,插入table。
ts
/**
* populate holidays to a given location
*
* @param country country code, such as US
* @param year year of holiday, such as 2024
* @param language language code, such as 'en'
* @param location_id location_id
* @param space_id space_id
*/
const populateHolidays = async (
country: string,
language: string,
year: number,
location_id: number,
space_id: number
) => {
const hd = new Holidays(country)
const holidays = hd.getHolidays(year, language)
const holidayData = holidays.map((holiday) => ({
name: holiday.name,
from_date: holiday.start,
to_date: holiday.end,
type: holiday.type,
location_id,
notes: holiday.rule,
substitute: holiday.substitute,
space_id,
}))
await prisma.holiday.createMany({
data: holidayData,
skipDuplicates: true,
})
}API
提供标准的CRUD API获取和编辑节假日。
使用
节假日主要用于初始化时间模式.在创建新的时间模式时,通常把节假日作为date_overrides传入:
ts
const holidays = await prisma.holiday.findMany({
where: {
location_id: locationId
}
})
const dateOverrides = holidays.map((holiday) => {
date: holiday.format('YYYY-MM-DD'),
name: holiday.name,
mode: {
all_day_closed: true,
segments: []
}
})
const timeMode = {
weekdays: DEFAULT_WORKING_HOUR,
date_overrides: dateOverrides
}