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>
30 lines
1.1 KiB
TypeScript
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)
|
|
}
|