Skip to content

Commit 3816711

Browse files
author
vikasrohit
authored
Merge pull request #142 from morehappiness/feature/timeline-milestone
Issue #128
2 parents 69a166c + 52ee6f6 commit 3816711

File tree

28 files changed

+574
-361
lines changed

28 files changed

+574
-361
lines changed

src/models/phaseProduct.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,7 @@ module.exports = function definePhaseProduct(sequelize, DataTypes) {
2222
updatedBy: { type: DataTypes.INTEGER, allowNull: false },
2323
}, {
2424
tableName: 'phase_products',
25-
paranoid: false,
25+
paranoid: true,
2626
timestamps: true,
2727
updatedAt: 'updatedAt',
2828
createdAt: 'createdAt',

src/models/project.js

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -38,11 +38,13 @@ module.exports = function defineProject(sequelize, DataTypes) {
3838
deletedAt: { type: DataTypes.DATE, allowNull: true },
3939
createdAt: { type: DataTypes.DATE, defaultValue: DataTypes.NOW },
4040
updatedAt: { type: DataTypes.DATE, defaultValue: DataTypes.NOW },
41+
deletedBy: DataTypes.BIGINT,
4142
createdBy: { type: DataTypes.INTEGER, allowNull: false },
4243
updatedBy: { type: DataTypes.INTEGER, allowNull: false },
4344
version: { type: DataTypes.STRING(3), allowNull: false, defaultValue: 'v3' },
4445
}, {
4546
tableName: 'projects',
47+
paranoid: true,
4648
timestamps: true,
4749
updatedAt: 'updatedAt',
4850
createdAt: 'createdAt',

src/models/projectAttachment.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,11 +12,12 @@ module.exports = function defineProjectAttachment(sequelize, DataTypes) {
1212
deletedAt: { type: DataTypes.DATE, allowNull: true },
1313
createdAt: { type: DataTypes.DATE, defaultValue: DataTypes.NOW },
1414
updatedAt: { type: DataTypes.DATE, defaultValue: DataTypes.NOW },
15+
deletedBy: DataTypes.BIGINT,
1516
createdBy: { type: DataTypes.INTEGER, allowNull: false },
1617
updatedBy: { type: DataTypes.INTEGER, allowNull: false },
1718
}, {
1819
tableName: 'project_attachments',
19-
paranoid: false,
20+
paranoid: true,
2021
timestamps: true,
2122
updatedAt: 'updatedAt',
2223
createdAt: 'createdAt',

src/models/projectHistory.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -11,7 +11,7 @@ module.exports = function defineProjectHistory(sequelize, DataTypes) {
1111
updatedBy: { type: DataTypes.INTEGER, allowNull: false },
1212
}, {
1313
tableName: 'project_history',
14-
paranoid: false,
14+
paranoid: true,
1515
timestamps: true,
1616
updatedAt: 'updatedAt',
1717
createdAt: 'createdAt',

src/models/projectMember.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -17,6 +17,7 @@ module.exports = function defineProjectMember(sequelize, DataTypes) {
1717
deletedAt: { type: DataTypes.DATE, allowNull: true },
1818
createdAt: { type: DataTypes.DATE, defaultValue: DataTypes.NOW },
1919
updatedAt: { type: DataTypes.DATE, defaultValue: DataTypes.NOW },
20+
deletedBy: DataTypes.BIGINT,
2021
createdBy: { type: DataTypes.INTEGER, allowNull: false },
2122
updatedBy: { type: DataTypes.INTEGER, allowNull: false },
2223
}, {

src/models/projectPhase.js

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -23,7 +23,7 @@ module.exports = function defineProjectPhase(sequelize, DataTypes) {
2323
updatedBy: { type: DataTypes.INTEGER, allowNull: false },
2424
}, {
2525
tableName: 'project_phases',
26-
paranoid: false,
26+
paranoid: true,
2727
timestamps: true,
2828
updatedAt: 'updatedAt',
2929
createdAt: 'createdAt',

src/routes/attachments/delete.js

Lines changed: 4 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,9 @@ module.exports = [
3737
return Promise.reject(err);
3838
}
3939
attachment = _attachment;
40-
return _attachment.destroy();
41-
})
40+
return _attachment.update({ deletedBy: req.authUser.userId })
41+
.then(() => _attachment.destroy());
42+
}))
4243
.then((_attachment) => {
4344
if (process.env.NODE_ENV !== 'development') {
4445
return fileService.deleteFile(req, _attachment.filePath);
@@ -56,6 +57,6 @@ module.exports = [
5657
req.app.emit(EVENT.ROUTING_KEY.PROJECT_ATTACHMENT_REMOVED, { req, pattachment });
5758
res.status(204).json({});
5859
})
59-
.catch(err => next(err)));
60+
.catch(err => next(err));
6061
},
6162
];

src/routes/attachments/delete.spec.js

Lines changed: 26 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -7,6 +7,7 @@ import models from '../../models';
77
import util from '../../util';
88
import server from '../../app';
99
import testUtil from '../../tests/util';
10+
import chai from 'chai';
1011

1112

1213
describe('Project Attachments delete', () => {
@@ -113,8 +114,31 @@ describe('Project Attachments delete', () => {
113114
if (err) {
114115
done(err);
115116
} else {
116-
deleteSpy.should.have.been.calledOnce;
117-
done();
117+
setTimeout(() =>
118+
models.ProjectAttachment.findOne({
119+
where: {
120+
projectId: project1.id,
121+
id: attachment.id,
122+
},
123+
paranoid: false,
124+
})
125+
.then((res) => {
126+
if (!res) {
127+
throw new Error('Should found the entity');
128+
} else {
129+
deleteSpy.should.have.been.calledOnce;
130+
131+
chai.assert.isNotNull(res.deletedAt);
132+
chai.assert.isNotNull(res.deletedBy);
133+
134+
request(server)
135+
.get(`/v4/projects/${project1.id}/attachments/${attachment.id}`)
136+
.set({
137+
Authorization: `Bearer ${testUtil.jwts.admin}`,
138+
})
139+
.expect(404, done);
140+
}
141+
}), 500);
118142
}
119143
});
120144
});

src/routes/milestoneTemplates/delete.js

Lines changed: 14 additions & 23 deletions
Original file line numberDiff line numberDiff line change
@@ -25,33 +25,24 @@ module.exports = [
2525
productTemplateId: req.params.productTemplateId,
2626
};
2727

28-
return models.sequelize.transaction(tx =>
29-
// Update the deletedBy
30-
models.ProductMilestoneTemplate.update({ deletedBy: req.authUser.userId }, {
28+
return models.sequelize.transaction(() =>
29+
// soft delete the record
30+
models.ProductMilestoneTemplate.findOne({
3131
where,
32-
returning: true,
33-
raw: true,
34-
transaction: tx,
32+
}).then((existing) => {
33+
if (!existing) {
34+
// handle 404
35+
const err = new Error(
36+
`Milestone template not found for milestone template id ${req.params.milestoneTemplateId}`);
37+
err.status = 404;
38+
return Promise.reject(err);
39+
}
40+
return existing.update({ deletedBy: req.authUser.userId });
3541
})
36-
.then((updatedResults) => {
37-
// Not found
38-
if (updatedResults[0] === 0) {
39-
const apiErr = new Error(
40-
`Milestone template not found for milestone template id ${req.params.milestoneTemplateId}`);
41-
apiErr.status = 404;
42-
return Promise.reject(apiErr);
43-
}
44-
45-
// Soft delete
46-
return models.ProductMilestoneTemplate.destroy({
47-
where,
48-
transaction: tx,
49-
});
50-
})
42+
.then(entity => entity.destroy()))
5143
.then(() => {
5244
res.status(204).end();
5345
})
54-
.catch(next),
55-
);
46+
.catch(next);
5647
},
5748
];

src/routes/milestoneTemplates/delete.spec.js

Lines changed: 29 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,34 @@ import request from 'supertest';
66
import models from '../../models';
77
import server from '../../app';
88
import testUtil from '../../tests/util';
9+
import chai from 'chai';
910

11+
const expectAfterDelete = (productTemplateId, id, err, next) => {
12+
if (err) throw err;
13+
setTimeout(() =>
14+
models.ProductMilestoneTemplate.findOne({
15+
where: {
16+
id,
17+
productTemplateId,
18+
},
19+
paranoid: false,
20+
})
21+
.then((res) => {
22+
if (!res) {
23+
throw new Error('Should found the entity');
24+
} else {
25+
chai.assert.isNotNull(res.deletedAt);
26+
chai.assert.isNotNull(res.deletedBy);
27+
28+
request(server)
29+
.get(`/v4/productTemplates/${productTemplateId}/milestones/${id}`)
30+
.set({
31+
Authorization: `Bearer ${testUtil.jwts.admin}`,
32+
})
33+
.expect(404, next);
34+
}
35+
}), 500);
36+
};
1037
const productTemplates = [
1138
{
1239
name: 'name 1',
@@ -180,7 +207,7 @@ describe('DELETE milestone template', () => {
180207
Authorization: `Bearer ${testUtil.jwts.admin}`,
181208
})
182209
.expect(204)
183-
.end(done);
210+
.end(err => expectAfterDelete(1, 1, err, done));
184211
});
185212

186213
it('should return 204, for connect admin, if template was successfully removed', (done) => {
@@ -190,7 +217,7 @@ describe('DELETE milestone template', () => {
190217
Authorization: `Bearer ${testUtil.jwts.connectAdmin}`,
191218
})
192219
.expect(204)
193-
.end(done);
220+
.end(err => expectAfterDelete(1, 1, err, done));
194221
});
195222
});
196223
});

0 commit comments

Comments
 (0)