UNPKG

@wepublish/api

Version:
309 lines 10.5 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); exports.getUserForCredentials = exports.getUsers = exports.createUserFilter = exports.createUserOrder = void 0; const tslib_1 = require("tslib"); const bcrypt_1 = tslib_1.__importDefault(require("bcrypt")); const user_1 = require("../../db/user"); const api_1 = require("../../../../user-api/src"); const validator_1 = require("../../validator"); const api_2 = require("../../../../utils-api/src"); const createUserOrder = (field, sortOrder) => { switch (field) { case user_1.UserSort.CreatedAt: return { createdAt: (0, api_2.graphQLSortOrderToPrisma)(sortOrder) }; case user_1.UserSort.ModifiedAt: return { modifiedAt: (0, api_2.graphQLSortOrderToPrisma)(sortOrder) }; case user_1.UserSort.Name: return { name: (0, api_2.graphQLSortOrderToPrisma)(sortOrder) }; case user_1.UserSort.FirstName: return { firstName: (0, api_2.graphQLSortOrderToPrisma)(sortOrder) }; } }; exports.createUserOrder = createUserOrder; const createUserRoleFilter = (filter) => { if (filter === null || filter === void 0 ? void 0 : filter.userRole) { return { roleIDs: { hasSome: filter.userRole } }; } return {}; }; const createNameFilter = (filter) => { if (filter === null || filter === void 0 ? void 0 : filter.name) { return { name: { contains: filter.name, mode: 'insensitive' } }; } return {}; }; const createUserNameFilter = (filter) => { const splitedString = (filter.text || '').split(' '); if (splitedString.length === 1) { return { OR: [ { firstName: { contains: splitedString[0], mode: 'insensitive' } }, { name: { contains: splitedString[0], mode: 'insensitive' } } ] }; } else if (splitedString.length === 2) { return { // Double word first / last names OR: [ { firstName: { contains: `${splitedString[0]} ${splitedString[1]}`, mode: 'insensitive' } }, { name: { contains: `${splitedString[0]} ${splitedString[1]}`, mode: 'insensitive' } }, // Single word first and lastname { AND: [ { firstName: { contains: splitedString[0], mode: 'insensitive' } }, { name: { contains: splitedString[1], mode: 'insensitive' } } ] }, { AND: [ { firstName: { contains: splitedString[1], mode: 'insensitive' } }, { name: { contains: splitedString[0], mode: 'insensitive' } } ] } ] }; } else { return { OR: [ { // Filter start with double firstname and ends with single or multi-word lastname AND: [ { firstName: { contains: `${splitedString[0]} ${splitedString[1]}`, mode: 'insensitive' } }, { name: { contains: splitedString.slice(2).join(' '), mode: 'insensitive' } } ] }, { // Filter start with single firstname and ends with multi-word lastname AND: [ { firstName: { contains: `${splitedString[0]}`, mode: 'insensitive' } }, { name: { contains: splitedString.slice(1).join(' '), mode: 'insensitive' } } ] }, // Filter start with double lastname and ends with single or multi-word firstname { AND: [ { name: { contains: `${splitedString[0]} ${splitedString[1]}`, mode: 'insensitive' } }, { firstName: { contains: splitedString.slice(2).join(' '), mode: 'insensitive' } } ] }, // Filter start with single lastname and ends with multi-word firstname { AND: [ { name: { contains: `${splitedString[0]}`, mode: 'insensitive' } }, { firstName: { contains: splitedString.slice(2).join(' '), mode: 'insensitive' } } ] } ] }; } }; const createTextFilter = (filter) => { if (filter === null || filter === void 0 ? void 0 : filter.text) { return { OR: [ { preferredName: { contains: filter.text, mode: 'insensitive' } }, { email: { contains: filter.text, mode: 'insensitive' } }, { address: { OR: [ { streetAddress: { contains: filter.text, mode: 'insensitive' } }, { zipCode: { contains: filter.text, mode: 'insensitive' } }, { city: { contains: filter.text, mode: 'insensitive' } } ] } }, createUserNameFilter(filter) ] }; } return {}; }; const createUserFilter = (filter) => { return { AND: [createNameFilter(filter), createTextFilter(filter), createUserRoleFilter(filter)] }; }; exports.createUserFilter = createUserFilter; const getUsers = (filter, sortedField, order, cursorId, skip, take, user) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { const orderBy = (0, exports.createUserOrder)(sortedField, order); const where = (0, exports.createUserFilter)(filter); const [totalCount, users] = yield Promise.all([ user.count({ where, orderBy }), user.findMany({ where, skip, take: (0, api_2.getMaxTake)(take) + 1, orderBy, cursor: cursorId ? { id: cursorId } : undefined, select: api_1.unselectPassword }) ]); const nodes = users.slice(0, take); const firstUser = nodes[0]; const lastUser = nodes[nodes.length - 1]; const hasPreviousPage = Boolean(skip); const hasNextPage = users.length > nodes.length; return { nodes, totalCount, pageInfo: { hasPreviousPage, hasNextPage, startCursor: firstUser === null || firstUser === void 0 ? void 0 : firstUser.id, endCursor: lastUser === null || lastUser === void 0 ? void 0 : lastUser.id } }; }); exports.getUsers = getUsers; const getUserForCredentials = (email, password, userClient) => tslib_1.__awaiter(void 0, void 0, void 0, function* () { email = email.toLowerCase(); yield validator_1.Validator.login().parse({ email }); const user = yield userClient.findUnique({ where: { email }, include: { address: true, oauth2Accounts: true, paymentProviderCustomers: true, properties: true } }); if (!user) { return null; } const theSame = yield bcrypt_1.default.compare(password, user.password); if (!theSame) { return null; } return user; }); exports.getUserForCredentials = getUserForCredentials; //# sourceMappingURL=user.queries.js.map