const TABLE = 'vk_owner_settings' /** 没有保存过设置的主人使用的产品默认值:Asia/Shanghai、23:00–08:00 安静、两类邮件都开。 */ export const DEFAULT_OWNER_SETTINGS = Object.freeze({ timezone: 'Asia/Shanghai', quiet_start_hour: 23, quiet_end_hour: 8, email_help: true, email_digest: true }) /** * @typedef {{ timezone: string, quiet_start_hour: number, quiet_end_hour: number, email_help: boolean, email_digest: boolean }} OwnerSettings */ /** * 主人的通知设置:时区、安静时段、邮件开关。 * @param {{ db: import('knex').Knex }} deps */ export function createOwnerSettings({ db }) { if (typeof db !== 'function') throw new Error('createOwnerSettings: db is required') /** * @param {object} _ctx * @param {{ user_id: string }} input * @returns {Promise} */ async function get(_ctx, { user_id }) { const row = await db(TABLE).where({ user_id }).first() if (row === undefined) return { ...DEFAULT_OWNER_SETTINGS } return { timezone: row.timezone, quiet_start_hour: row.quiet_start_hour, quiet_end_hour: row.quiet_end_hour, email_help: row.email_help === 1, email_digest: row.email_digest === 1 } } /** * @param {object} _ctx * @param {{ user_id: string, settings: OwnerSettings }} input */ async function save(_ctx, { user_id, settings }) { await db(TABLE).insert({ user_id, ...settings, updated_at: new Date() }).onConflict('user_id').merge() } return { get, save } }