Skip to content

Commit 9237cb8

Browse files
committed
use transaction
1 parent 3fe176e commit 9237cb8

File tree

4 files changed

+24
-15
lines changed

4 files changed

+24
-15
lines changed

src/routes/phaseMembers/updateService.js

Lines changed: 14 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -7,13 +7,19 @@ import models from '../../models';
77
* @param {String} projectId the project id
88
* @param {String} phaseId the phase id
99
* @param {Array<Number>} newPhaseMembers the array of userIds
10+
* @param {Object} _transaction the sequelize transaction (optional)
1011
* @returns {Array<Number>} the array of updated phase member objects
1112
*/
12-
async function update(currentUser, projectId, phaseId, newPhaseMembers) {
13+
async function update(currentUser, projectId, phaseId, newPhaseMembers, _transaction) {
1314
const createdBy = _.parseInt(currentUser.userId);
1415
const updatedBy = _.parseInt(currentUser.userId);
1516
const newMembers = _.uniq(newPhaseMembers);
16-
const transaction = await models.sequelize.transaction();
17+
let transaction;
18+
if (_.isUndefined(_transaction)) {
19+
transaction = await models.sequelize.transaction();
20+
} else {
21+
transaction = _transaction;
22+
}
1723
try {
1824
const projectMembers = _.map(await models.ProjectMember.getActiveProjectMembers(projectId), 'userId');
1925
const notProjectMembers = _.difference(newMembers, projectMembers);
@@ -35,10 +41,14 @@ async function update(currentUser, projectId, phaseId, newPhaseMembers) {
3541
const result = await models.ProjectPhaseMember.bulkCreate(createData, { transaction });
3642
phaseMembers.push(..._.map(result, item => item.toJSON()));
3743
}
38-
await transaction.commit();
44+
if (_.isUndefined(_transaction)) {
45+
await transaction.commit();
46+
}
3947
return phaseMembers;
4048
} catch (err) {
41-
await transaction.rollback();
49+
if (_.isUndefined(_transaction)) {
50+
await transaction.rollback();
51+
}
4252
throw err;
4353
}
4454
}

src/routes/phases/create.js

Lines changed: 4 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -47,7 +47,7 @@ module.exports = [
4747
});
4848

4949
let newProjectPhase = null;
50-
models.sequelize.transaction(() => {
50+
models.sequelize.transaction((transaction) => {
5151
req.log.debug('Create Phase - Starting transaction');
5252
return models.Project.findOne({
5353
where: { id: projectId, deletedAt: { $eq: null } },
@@ -64,7 +64,7 @@ module.exports = [
6464
throw err;
6565
}
6666
return models.ProjectPhase
67-
.create(_.omit(data, 'members'))
67+
.create(_.omit(data, 'members'), { transaction })
6868
.then((_newProjectPhase) => {
6969
newProjectPhase = _.cloneDeep(_newProjectPhase);
7070
req.log.debug('new project phase created (id# %d, name: %s)',
@@ -88,7 +88,6 @@ module.exports = [
8888
err.status = 400;
8989
throw err;
9090
}
91-
9291
// Create the phase product
9392
return models.PhaseProduct.create({
9493
name: productTemplate.name,
@@ -98,7 +97,7 @@ module.exports = [
9897
phaseId: newProjectPhase.id,
9998
createdBy: req.authUser.userId,
10099
updatedBy: req.authUser.userId,
101-
})
100+
}, { transaction })
102101
.then((phaseProduct) => {
103102
newProjectPhase.products = [
104103
_.omit(phaseProduct.toJSON(), ['deletedAt', 'deletedBy']),
@@ -112,7 +111,7 @@ module.exports = [
112111
return Promise.resolve();
113112
}
114113

115-
return updatePhaseMemberService(req.authUser, projectId, newProjectPhase.id, data.members)
114+
return updatePhaseMemberService(req.authUser, projectId, newProjectPhase.id, data.members, transaction)
116115
.then(members => _.assign(newProjectPhase, { members }));
117116
});
118117
})

src/routes/phases/delete.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -16,7 +16,7 @@ module.exports = [
1616
const projectId = _.parseInt(req.params.projectId);
1717
const phaseId = _.parseInt(req.params.phaseId);
1818

19-
models.sequelize.transaction(() =>
19+
models.sequelize.transaction(transaction =>
2020
// soft delete the record
2121
models.ProjectPhase.findOne({
2222
where: {
@@ -32,9 +32,9 @@ module.exports = [
3232
err.status = 404;
3333
return Promise.reject(err);
3434
}
35-
return existing.update({ deletedBy: req.authUser.userId });
35+
return existing.update({ deletedBy: req.authUser.userId }, { transaction });
3636
})
37-
.then(entity => entity.destroy()))
37+
.then(entity => entity.destroy({ transaction })))
3838
.then((deleted) => {
3939
req.log.debug('deleted project phase', JSON.stringify(deleted, null, 2));
4040

src/routes/phases/update.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -45,7 +45,7 @@ module.exports = [
4545
let previousValue;
4646
let updated;
4747

48-
models.sequelize.transaction(() => models.ProjectPhase.findOne({
48+
models.sequelize.transaction(transaction => models.ProjectPhase.findOne({
4949
where: {
5050
id: phaseId,
5151
projectId,
@@ -82,7 +82,7 @@ module.exports = [
8282
reject(err);
8383
} else {
8484
_.extend(existing, _.omit(updatedProps, 'members'));
85-
existing.save().then(accept).catch(reject);
85+
existing.save({ transaction }).then(accept).catch(reject);
8686
}
8787
}
8888
}))
@@ -94,7 +94,7 @@ module.exports = [
9494
return Promise.resolve();
9595
}
9696

97-
return updatePhaseMemberService(req.authUser, projectId, phaseId, updatedProps.members)
97+
return updatePhaseMemberService(req.authUser, projectId, phaseId, updatedProps.members, transaction)
9898
.then(members => _.assign(updated, { members }));
9999
}),
100100
)

0 commit comments

Comments
 (0)