2022-04-08 02:28:22 +02:00
|
|
|
const { ViewNames } = require("./db/utils")
|
|
|
|
const { queryGlobalView } = require("./db/views")
|
2022-06-30 16:39:26 +02:00
|
|
|
const { UNICODE_MAX } = require("./db/constants")
|
2022-04-08 02:28:22 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Given an email address this will use a view to search through
|
|
|
|
* all the users to find one with this email address.
|
|
|
|
* @param {string} email the email to lookup the user by.
|
|
|
|
* @return {Promise<object|null>}
|
|
|
|
*/
|
|
|
|
exports.getGlobalUserByEmail = async email => {
|
|
|
|
if (email == null) {
|
|
|
|
throw "Must supply an email address to view"
|
|
|
|
}
|
|
|
|
|
2022-04-12 13:34:36 +02:00
|
|
|
const response = await queryGlobalView(ViewNames.USER_BY_EMAIL, {
|
2022-04-08 02:28:22 +02:00
|
|
|
key: email.toLowerCase(),
|
|
|
|
include_docs: true,
|
|
|
|
})
|
2022-04-12 13:34:36 +02:00
|
|
|
|
|
|
|
return response
|
2022-04-08 02:28:22 +02:00
|
|
|
}
|
2022-06-30 16:39:26 +02:00
|
|
|
|
|
|
|
/**
|
|
|
|
* Performs a starts with search on the global email view.
|
|
|
|
*/
|
|
|
|
exports.searchGlobalUsersByEmail = async (email, opts) => {
|
|
|
|
if (typeof email !== "string") {
|
|
|
|
throw new Error("Must provide a string to search by")
|
|
|
|
}
|
|
|
|
const lcEmail = email.toLowerCase()
|
|
|
|
// handle if passing up startkey for pagination
|
|
|
|
const startkey = opts && opts.startkey ? opts.startkey : lcEmail
|
|
|
|
let response = await queryGlobalView(ViewNames.USER_BY_EMAIL, {
|
|
|
|
...opts,
|
|
|
|
startkey,
|
|
|
|
endkey: `${lcEmail}${UNICODE_MAX}`,
|
|
|
|
})
|
|
|
|
if (!response) {
|
|
|
|
response = []
|
|
|
|
}
|
|
|
|
return Array.isArray(response) ? response : [response]
|
|
|
|
}
|