@wepublish/api
Version:
API core for we.publish.
309 lines • 10.5 kB
JavaScript
;
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