From 740d562ef459c6aa434a68c2e59d7b689347fe05 Mon Sep 17 00:00:00 2001 From: Chris Brame Date: Wed, 18 May 2022 03:37:40 -0400 Subject: [PATCH] refactor(accounts): moved some code to async/await --- .../containers/Modals/EditAccountModal.jsx | 10 +- src/controllers/api/v2/accounts.js | 2 +- src/models/group.js | 107 +++++++++++++----- 3 files changed, 84 insertions(+), 35 deletions(-) diff --git a/src/client/containers/Modals/EditAccountModal.jsx b/src/client/containers/Modals/EditAccountModal.jsx index d212e1bba..3cca7ad57 100644 --- a/src/client/containers/Modals/EditAccountModal.jsx +++ b/src/client/containers/Modals/EditAccountModal.jsx @@ -82,7 +82,7 @@ class EditAccountModal extends React.Component { onImageUploadChanged (e) { const self = e.target const that = this - let formData = new FormData() + const formData = new FormData() formData.append('username', this.props.user.username) formData.append('_id', this.props.user._id) formData.append('image', self.files[0]) @@ -139,9 +139,7 @@ class EditAccountModal extends React.Component { return { text: role.name, value: role._id } }) - let departments, groups, teams - - teams = this.props.teams + const teams = this.props.teams ? this.props.teams .map(team => { return { text: team.get('name'), value: team.get('_id') } @@ -149,7 +147,7 @@ class EditAccountModal extends React.Component { .toArray() : [] - departments = this.props.departments + const departments = this.props.departments ? this.props.departments .map(department => { return { text: department.get('name'), value: department.get('_id') } @@ -157,7 +155,7 @@ class EditAccountModal extends React.Component { .toArray() : [] - groups = this.props.groups + const groups = this.props.groups ? this.props.groups .map(group => { return { text: group.get('name'), value: group.get('_id') } diff --git a/src/controllers/api/v2/accounts.js b/src/controllers/api/v2/accounts.js index 44ad0f32e..e6738b730 100644 --- a/src/controllers/api/v2/accounts.js +++ b/src/controllers/api/v2/accounts.js @@ -228,7 +228,7 @@ accountsApi.update = async function (req, res) { let user = await User.getByUsername(username) if (!user) throw new Error('Invalid User') - postData._id = user._id + postData._id = user._id.toString() if ( !_.isUndefined(postData.password) && !_.isEmpty(postData.password) && diff --git a/src/models/group.js b/src/models/group.js index d54110c95..a5fe66ee1 100644 --- a/src/models/group.js +++ b/src/models/group.js @@ -50,29 +50,58 @@ groupSchema.pre('save', function (next) { next() }) -groupSchema.methods.addMember = function (memberId, callback) { - if (_.isUndefined(memberId)) return callback('Invalid MemberId - $Group.AddMember()') +groupSchema.methods.addMember = async function (memberId, callback) { + const self = this + return new Promise((resolve, reject) => { + ;(async () => { + if (_.isUndefined(memberId)) { + if (typeof callback === 'function') return callback({ message: 'Invalid MemberId - $Group.AddMember()' }) + + return reject(new Error('Invalid MemberId - $Group.AddMember()')) + } - if (this.members === null) this.members = [] + if (self.members === null) self.members = [] + if (isMember(self.members, memberId)) { + if (typeof callback === 'function') return callback(null, false) - if (isMember(this.members, memberId)) return callback(null, false) + return resolve(false) + } - this.members.push(memberId) - this.members = _.uniq(this.members) + self.members.push(memberId) + self.members = _.uniq(self.members) - return callback(null, true) + if (typeof callback === 'function') return callback(null, true) + + return resolve(true) + })() + }) } -groupSchema.methods.removeMember = function (memberId, callback) { - if (_.isUndefined(memberId)) return callback('Invalid MemberId - $Group.RemoveMember()') +groupSchema.methods.removeMember = async function (memberId, callback) { + const self = this + const hasCallback = typeof callback === 'function' + return new Promise((resolve, reject) => { + ;(async () => { + if (_.isUndefined(memberId)) { + if (hasCallback) return callback({ message: 'Invalid MemberId - $Group.RemoveMember()' }) + + return reject(new Error('Invalid MemberId - $Group.RemoveMember()')) + } + + if (!isMember(self.members, memberId)) { + if (hasCallback) return callback(null, false) - if (!isMember(this.members, memberId)) return callback(null, false) + return resolve(false) + } - this.members.splice(_.indexOf(this.members, _.find(this.members, { _id: memberId })), 1) + self.members.splice(_.indexOf(self.members, _.find(self.members, { _id: memberId })), 1) + self.members = _.uniq(self.members) - this.members = _.uniq(this.members) + if (hasCallback) return callback(null, true) - return callback(null, true) + return resolve(true) + })() + }) } groupSchema.methods.isMember = function (memberId) { @@ -139,14 +168,24 @@ groupSchema.statics.getWithObject = function (obj, callback) { .exec(callback) } -groupSchema.statics.getAllGroups = function (callback) { - var q = this.model(COLLECTION) - .find({}) - .populate('members', '_id username fullname email role preferences image title deleted') - .populate('sendMailTo', '_id username fullname email role preferences image title deleted') - .sort('name') +groupSchema.statics.getAllGroups = async function (callback) { + const self = this + return new Promise((resolve, reject) => { + ;(async () => { + const q = self + .model(COLLECTION) + .find({}) + .populate('members', '_id username fullname email role preferences image title deleted') + .populate('sendMailTo', '_id username fullname email role preferences image title deleted') + .sort('name') - return q.exec(callback) + if (typeof callback === 'function') return q.exec(callback) + + const groups = await q.exec() + + return resolve(groups) + })() + }) } groupSchema.statics.getAllGroupsNoPopulate = function (callback) { @@ -194,16 +233,28 @@ groupSchema.statics.getGroups = async function (groupIds, callback) { }) } -groupSchema.statics.getAllGroupsOfUser = function (userId, callback) { - if (_.isUndefined(userId)) return callback('Invalid UserId - GroupSchema.GetAllGroupsOfUser()') +groupSchema.statics.getAllGroupsOfUser = async function (userId, callback) { + return new Promise((resolve, reject) => { + ;(async () => { + if (_.isUndefined(userId)) { + if (typeof callback === 'function') + return callback({ message: 'Invalid UserId - GroupSchema.GetAllGroupsOfUser()' }) + return reject(new Error('Invalid UserId - GroupSchema.GetAllGroupsOfUser()')) + } - var q = this.model(COLLECTION) - .find({ members: userId }) - .populate('members', '_id username fullname email role preferences image title deleted') - .populate('sendMailTo', '_id username fullname email role preferences image title deleted') - .sort('name') + const q = this.model(COLLECTION) + .find({ members: userId }) + .populate('members', '_id username fullname email role preferences image title deleted') + .populate('sendMailTo', '_id username fullname email role preferences image title deleted') + .sort('name') - return q.exec(callback) + if (typeof callback === 'function') return q.exec(callback) + + const groups = await q.exec() + + return resolve(groups) + })() + }) } groupSchema.statics.getAllGroupsOfUserNoPopulate = function (userId, callback) {