chris f969e5d242 feat: configurable booking lead time in admin (default 48h)
Adds leadTimeHours to HoursConfig. Slot generation, calendar minDate,
and pickup disabled-date precomputation all read from the config.
Admin hours page has a new input to adjust it without a redeploy.

Co-Authored-By: Claude Sonnet 4.6 <noreply@anthropic.com>
2026-05-08 07:48:13 -04:00

30 lines
1.1 KiB
TypeScript

import { readFileSync, existsSync } from 'fs'
import path from 'path'
import { atomicWriteJSON } from './file-utils'
import { DEFAULT_HOURS } from './hours-config'
import type { HoursConfig } from './hours-config'
export type { DayHours, WeekHours, HoursConfig } from './hours-config'
export { DEFAULT_HOURS, minsToTime, timeToMins } from './hours-config'
const HOURS_PATH = path.join(process.cwd(), 'data', 'hours.json')
export function getHoursConfig(): HoursConfig {
if (!existsSync(HOURS_PATH)) return DEFAULT_HOURS
try {
const saved = JSON.parse(readFileSync(HOURS_PATH, 'utf-8')) as Partial<HoursConfig>
return {
delivery: { ...DEFAULT_HOURS.delivery, ...(saved.delivery ?? {}) },
pickup: { ...DEFAULT_HOURS.pickup, ...(saved.pickup ?? {}) },
deliveryWindowMinutes: saved.deliveryWindowMinutes ?? DEFAULT_HOURS.deliveryWindowMinutes,
leadTimeHours: saved.leadTimeHours ?? DEFAULT_HOURS.leadTimeHours,
}
} catch {
return DEFAULT_HOURS
}
}
export function saveHoursConfig(config: HoursConfig): void {
atomicWriteJSON(HOURS_PATH, config)
}