Skip to content

Commit 673c621

Browse files
author
Vikas Agarwal
committed
Fixing wrong handling of transactions in projects model.
1 parent 89884ac commit 673c621

File tree

3 files changed

+48
-46
lines changed

3 files changed

+48
-46
lines changed

src/routes/projects/create.js

Lines changed: 26 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -242,9 +242,10 @@ module.exports = [
242242
if (!project.templateId) {
243243
project.version = 'v2';
244244
}
245+
let newProject = null;
246+
let newPhases;
245247
models.sequelize.transaction(() => {
246-
let newProject = null;
247-
let newPhases;
248+
req.log.debug('Create Project - Starting transaction');
248249
// Validate the project type
249250
return validateProjectType(project.type)
250251
// Validate the templates
@@ -294,30 +295,30 @@ module.exports = [
294295
return Promise.resolve();
295296
});
296297
// return Promise.resolve();
297-
})
298-
.then(() => {
299-
newProject = newProject.get({ plain: true });
300-
// remove utm details & deletedAt field
301-
newProject = _.omit(newProject, ['deletedAt', 'utm']);
302-
// add an empty attachments array
303-
newProject.attachments = [];
304-
// set phases array
305-
newProject.phases = newPhases;
306-
307-
req.log.debug('Sending event to RabbitMQ bus for project %d', newProject.id);
308-
req.app.services.pubsub.publish(EVENT.ROUTING_KEY.PROJECT_DRAFT_CREATED,
309-
newProject,
310-
{ correlationId: req.id },
311-
);
312-
req.log.debug('Sending event to Kafka bus for project %d', newProject.id);
313-
// emit event
314-
req.app.emit(EVENT.ROUTING_KEY.PROJECT_DRAFT_CREATED, { req, project: newProject });
315-
res.status(201).json(util.wrapResponse(req.id, newProject, 1, 201));
316-
})
317-
.catch((err) => {
318-
req.log.error(err.message);
319-
util.handleError('Error creating project', err, req, next);
320298
});
299+
})
300+
.then(() => {
301+
newProject = newProject.get({ plain: true });
302+
// remove utm details & deletedAt field
303+
newProject = _.omit(newProject, ['deletedAt', 'utm']);
304+
// add an empty attachments array
305+
newProject.attachments = [];
306+
// set phases array
307+
newProject.phases = newPhases;
308+
309+
req.log.debug('Sending event to RabbitMQ bus for project %d', newProject.id);
310+
req.app.services.pubsub.publish(EVENT.ROUTING_KEY.PROJECT_DRAFT_CREATED,
311+
newProject,
312+
{ correlationId: req.id },
313+
);
314+
req.log.debug('Sending event to Kafka bus for project %d', newProject.id);
315+
// emit event
316+
req.app.emit(EVENT.ROUTING_KEY.PROJECT_DRAFT_CREATED, { req, project: newProject });
317+
res.status(201).json(util.wrapResponse(req.id, newProject, 1, 201));
318+
})
319+
.catch((err) => {
320+
req.log.error(err.message);
321+
util.handleError('Error creating project', err, req, next);
321322
});
322323
},
323324
];

src/routes/projects/delete.js

Lines changed: 19 additions & 18 deletions
Original file line numberDiff line numberDiff line change
@@ -22,23 +22,24 @@ module.exports = [
2222
where: { id: projectId },
2323
cascade: true,
2424
transaction: t,
25-
})
26-
.then((count) => {
27-
if (count === 0) {
28-
const err = new Error('Project not found');
29-
err.status = 404;
30-
next(err);
31-
} else {
32-
req.app.services.pubsub.publish(
33-
EVENT.ROUTING_KEY.PROJECT_DELETED,
34-
{ id: projectId },
35-
{ correlationId: req.id },
36-
);
37-
// emit event
38-
req.app.emit(EVENT.ROUTING_KEY.PROJECT_DELETED, { req, id: projectId });
39-
res.status(204).json({});
40-
}
41-
})
42-
.catch(err => next(err)));
25+
}),
26+
)
27+
.then((count) => {
28+
if (count === 0) {
29+
const err = new Error('Project not found');
30+
err.status = 404;
31+
next(err);
32+
} else {
33+
req.app.services.pubsub.publish(
34+
EVENT.ROUTING_KEY.PROJECT_DELETED,
35+
{ id: projectId },
36+
{ correlationId: req.id },
37+
);
38+
// emit event
39+
req.app.emit(EVENT.ROUTING_KEY.PROJECT_DELETED, { req, id: projectId });
40+
res.status(204).json({});
41+
}
42+
})
43+
.catch(err => next(err));
4344
},
4445
];

src/routes/projects/update.js

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -228,8 +228,8 @@ module.exports = [
228228
} else {
229229
accept();
230230
}
231-
}))
232-
.then(() => {
231+
})))
232+
.then(() => { // transaction has been committed
233233
project = project.get({ plain: true });
234234
project = _.omit(project, ['deletedAt']);
235235
req.log.debug('updated project', project);
@@ -252,7 +252,7 @@ module.exports = [
252252
project.members = req.context.currentProjectMembers;
253253
// get attachments
254254
return util.getProjectAttachments(req, project.id);
255-
}))
255+
})
256256
.then((attachments) => {
257257
// make sure we only send response after transaction is committed
258258
project.attachments = attachments;

0 commit comments

Comments
 (0)