Skip to content

每个国家和地区都有其特殊的节假日。我们采用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
}

Last updated: