owner-settings.js
1.46 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
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<OwnerSettings>}
*/
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 }
}