import {dbProvider} from "./db-provider"; import {value as byIdSql} from "./db-user-by-id_sql"; import {value as vivifySql} from "./db-user-vivify_sql"; import debugCtor = require("debug"); const debug = debugCtor("db:user"); export function dbUserCtor(dbProvider) { return { api: { /* lookup/create (vivify) a user based on the google userInfo and return the user's id. */ async vivify(userInfo: { email: string, displayName: string }): Promise { const dbs = await dbProvider(); const result = await dbs.write.one( vivifySql, { email: userInfo.email, displayName: userInfo.displayName, }, ); debug(`vivify result=${JSON.stringify(result)}`); if (result && result.user_id) { return result.user_id; } return null; }, /* lookup a user by id and return the userId, displayName, and primary email note: email can be null, but this is very unlikely to happen currently. */ async byId(userId: string): Promise<{ userId: string, displayName: string, email: string } | null> { const dbs = await dbProvider(); const result = await dbs.read.one( byIdSql, {userId}, ); debug(`byId(${userId}) result=${JSON.stringify(result)}`); if (result && result.id) { return {userId: result.id, displayName: result.display_name, email: result.email}; } return null; }, }, dbProvider, }; } export const dbUser = dbUserCtor(dbProvider).api;