mirror of
https://github.com/plankanban/planka.git
synced 2025-07-19 13:19:44 +02:00
parent
ad7fb51cfa
commit
2ee1166747
1557 changed files with 76832 additions and 47042 deletions
98
server/api/hooks/query-methods/models/User.js
Normal file
98
server/api/hooks/query-methods/models/User.js
Normal file
|
@ -0,0 +1,98 @@
|
|||
/*!
|
||||
* Copyright (c) 2024 PLANKA Software GmbH
|
||||
* Licensed under the Fair Use License: https://github.com/plankanban/planka/blob/master/LICENSE.md
|
||||
*/
|
||||
|
||||
const defaultFind = (criteria) => User.find(criteria).sort('id');
|
||||
|
||||
/* Query methods */
|
||||
|
||||
const createOne = (values) => {
|
||||
if (sails.config.custom.activeUsersLimit) {
|
||||
return sails.getDatastore().transaction(async (db) => {
|
||||
const queryResult = await sails
|
||||
.sendNativeQuery('SELECT NULL FROM user_account WHERE is_deactivated = $1 FOR UPDATE', [
|
||||
false,
|
||||
])
|
||||
.usingConnection(db);
|
||||
|
||||
if (queryResult.rowCount >= sails.config.custom.activeUsersLimit) {
|
||||
throw 'activeLimitReached';
|
||||
}
|
||||
|
||||
return User.create({ ...values })
|
||||
.fetch()
|
||||
.usingConnection(db);
|
||||
});
|
||||
}
|
||||
|
||||
return User.create({ ...values }).fetch();
|
||||
};
|
||||
|
||||
const getByIds = (ids) => defaultFind(ids);
|
||||
|
||||
const getAll = ({ roleOrRoles } = {}) =>
|
||||
defaultFind({
|
||||
role: roleOrRoles,
|
||||
});
|
||||
|
||||
const getOneById = (id, { withDeactivated = true } = {}) => {
|
||||
const criteria = {
|
||||
id,
|
||||
};
|
||||
|
||||
if (!withDeactivated) {
|
||||
criteria.isDeactivated = false;
|
||||
}
|
||||
|
||||
return User.findOne(criteria);
|
||||
};
|
||||
|
||||
const getOneByEmail = (email) =>
|
||||
User.findOne({
|
||||
email: email.toLowerCase(),
|
||||
});
|
||||
|
||||
const getOneActiveByEmailOrUsername = (emailOrUsername) => {
|
||||
const fieldName = emailOrUsername.includes('@') ? 'email' : 'username';
|
||||
|
||||
return User.findOne({
|
||||
[fieldName]: emailOrUsername.toLowerCase(),
|
||||
isDeactivated: false,
|
||||
});
|
||||
};
|
||||
|
||||
const updateOne = (criteria, values) => {
|
||||
if (values.isDeactivated === false && sails.config.custom.activeUsersLimit) {
|
||||
return sails.getDatastore().transaction(async (db) => {
|
||||
const queryResult = await sails
|
||||
.sendNativeQuery('SELECT NULL FROM user_account WHERE is_deactivated = $1 FOR UPDATE', [
|
||||
false,
|
||||
])
|
||||
.usingConnection(db);
|
||||
|
||||
if (queryResult.rowCount >= sails.config.custom.activeUsersLimit) {
|
||||
throw 'activeLimitReached';
|
||||
}
|
||||
|
||||
return User.updateOne(criteria)
|
||||
.set({ ...values })
|
||||
.usingConnection(db);
|
||||
});
|
||||
}
|
||||
|
||||
return User.updateOne(criteria).set({ ...values });
|
||||
};
|
||||
|
||||
const deleteOne = (criteria) => User.destroyOne(criteria);
|
||||
|
||||
module.exports = {
|
||||
createOne,
|
||||
getByIds,
|
||||
getAll,
|
||||
getOneById,
|
||||
getOneByEmail,
|
||||
getOneActiveByEmailOrUsername,
|
||||
updateOne,
|
||||
deleteOne,
|
||||
};
|
Loading…
Add table
Add a link
Reference in a new issue