Skip to content

Commit df97ad4

Browse files
authored
Merge pull request #136 from imcaizheng/post-event-with-payload-from-db-data
Post data to Kafka Events from created/updated in DB
2 parents 30c7474 + 94f7b37 commit df97ad4

File tree

9 files changed

+95
-116
lines changed

9 files changed

+95
-116
lines changed

src/common/helper.js

Lines changed: 2 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -231,13 +231,7 @@ async function indexBulkDataToES (modelName, indexName, logger) {
231231
logger.info({ component: 'indexBulkDataToES', message: 'Getting data from database' })
232232
const model = models[modelName]
233233
const data = await model.findAll({
234-
where: {
235-
deletedAt: null
236-
},
237-
raw: true,
238-
attributes: {
239-
exclude: ['deletedAt']
240-
},
234+
raw: true
241235
})
242236
if (_.isEmpty(data)) {
243237
logger.info({ component: 'indexBulkDataToES', message: `No data in database for ${modelName}` })
@@ -372,13 +366,7 @@ async function exportData (pathToFile, dataModels, logger) {
372366
for (let index = 0; index < dataModels.length; index += 1) {
373367
const modelName = dataModels[index]
374368
const modelRecords = await models[modelName].findAll({
375-
raw: true,
376-
where: {
377-
deletedAt: null
378-
},
379-
attributes: {
380-
exclude: ['deletedAt']
381-
}
369+
raw: true
382370
})
383371
allModelsRecords[modelName] = modelRecords
384372
logger.info({ component: 'exportData', message: `Records loaded for model: ${modelName} = ${modelRecords.length}` })

src/eventHandlers/JobEventHandler.js

Lines changed: 1 addition & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -39,8 +39,7 @@ async function cancelJob (payload) {
3939
jobId: job.id,
4040
status: {
4141
[Op.not]: 'cancelled'
42-
},
43-
deletedAt: null
42+
}
4443
}
4544
})
4645
await Promise.all(candidates.map(candidate => JobCandidateService.partiallyUpdateJobCandidate(

src/eventHandlers/ResourceBookingEventHandler.js

Lines changed: 2 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -50,8 +50,7 @@ async function selectJobCandidate (payload) {
5050
userId: resourceBooking.userId,
5151
status: {
5252
[Op.not]: 'selected'
53-
},
54-
deletedAt: null
53+
}
5554
}
5655
})
5756
await Promise.all(candidates.map(candidate => JobCandidateService.partiallyUpdateJobCandidate(
@@ -111,8 +110,7 @@ async function assignJob (payload) {
111110
const resourceBookings = await models.ResourceBooking.findAll({
112111
where: {
113112
jobId: job.id,
114-
status: 'assigned',
115-
deletedAt: null
113+
status: 'assigned'
116114
}
117115
})
118116
logger.debug({

src/models/Job.js

Lines changed: 25 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -24,24 +24,14 @@ module.exports = (sequelize) => {
2424
static async findById (id, withCandidates = false) {
2525
const criteria = {
2626
where: {
27-
id,
28-
deletedAt: null
29-
},
30-
attributes: {
31-
exclude: ['deletedAt']
27+
id
3228
}
3329
}
3430
if (withCandidates) {
3531
criteria.include = [{
3632
model: Job._models.JobCandidate,
3733
as: 'candidates',
38-
where: {
39-
deletedAt: null
40-
},
41-
required: false,
42-
attributes: {
43-
exclude: ['deletedAt']
44-
}
34+
required: false
4535
}]
4636
}
4737
const job = await Job.findOne(criteria)
@@ -108,24 +98,23 @@ module.exports = (sequelize) => {
10898
type: Sequelize.STRING(255),
10999
allowNull: false
110100
},
111-
createdAt: {
112-
field: 'created_at',
113-
type: Sequelize.DATE,
114-
allowNull: false
115-
},
116101
createdBy: {
117102
field: 'created_by',
118103
type: Sequelize.UUID,
119104
allowNull: false
120105
},
121-
updatedAt: {
122-
field: 'updated_at',
123-
type: Sequelize.DATE
124-
},
125106
updatedBy: {
126107
field: 'updated_by',
127108
type: Sequelize.UUID
128109
},
110+
createdAt: {
111+
field: 'created_at',
112+
type: Sequelize.DATE,
113+
},
114+
updatedAt: {
115+
field: 'updated_at',
116+
type: Sequelize.DATE
117+
},
129118
deletedAt: {
130119
field: 'deleted_at',
131120
type: Sequelize.DATE
@@ -135,7 +124,21 @@ module.exports = (sequelize) => {
135124
schema: config.DB_SCHEMA_NAME,
136125
sequelize,
137126
tableName: 'jobs',
138-
timestamps: false
127+
paranoid: true,
128+
deletedAt: 'deletedAt',
129+
createdAt: 'createdAt',
130+
updatedAt: 'updatedAt',
131+
timestamps: true,
132+
defaultScope: {
133+
attributes: {
134+
exclude: ['deletedAt']
135+
}
136+
},
137+
hooks: {
138+
afterCreate: (job) => {
139+
delete job.dataValues.deletedAt
140+
}
141+
}
139142
}
140143
)
141144

src/models/JobCandidate.js

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -21,11 +21,7 @@ module.exports = (sequelize) => {
2121
static async findById (id) {
2222
const jobCandidate = await JobCandidate.findOne({
2323
where: {
24-
id,
25-
deletedAt: null
26-
},
27-
attributes: {
28-
exclude: ['deletedAt']
24+
id
2925
}
3026
})
3127
if (!jobCandidate) {
@@ -63,24 +59,23 @@ module.exports = (sequelize) => {
6359
resume: {
6460
type: Sequelize.STRING(2048)
6561
},
66-
createdAt: {
67-
field: 'created_at',
68-
type: Sequelize.DATE,
69-
allowNull: false
70-
},
7162
createdBy: {
7263
field: 'created_by',
7364
type: Sequelize.UUID,
7465
allowNull: false
7566
},
76-
updatedAt: {
77-
field: 'updated_at',
78-
type: Sequelize.DATE
79-
},
8067
updatedBy: {
8168
field: 'updated_by',
8269
type: Sequelize.UUID
8370
},
71+
createdAt: {
72+
field: 'created_at',
73+
type: Sequelize.DATE,
74+
},
75+
updatedAt: {
76+
field: 'updated_at',
77+
type: Sequelize.DATE
78+
},
8479
deletedAt: {
8580
field: 'deleted_at',
8681
type: Sequelize.DATE
@@ -90,7 +85,21 @@ module.exports = (sequelize) => {
9085
schema: config.DB_SCHEMA_NAME,
9186
sequelize,
9287
tableName: 'job_candidates',
93-
timestamps: false
88+
paranoid: true,
89+
deletedAt: 'deletedAt',
90+
createdAt: 'createdAt',
91+
updatedAt: 'updatedAt',
92+
timestamps: true,
93+
defaultScope: {
94+
attributes: {
95+
exclude: ['deletedAt']
96+
}
97+
},
98+
hooks: {
99+
afterCreate: (jobCandidate) => {
100+
delete jobCandidate.dataValues.deletedAt
101+
}
102+
}
94103
}
95104
)
96105

src/models/ResourceBooking.js

Lines changed: 24 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -20,11 +20,7 @@ module.exports = (sequelize) => {
2020
static async findById (id) {
2121
const resourceBooking = await ResourceBooking.findOne({
2222
where: {
23-
id,
24-
deletedAt: null
25-
},
26-
attributes: {
27-
exclude: ['deletedAt']
23+
id
2824
}
2925
})
3026
if (!resourceBooking) {
@@ -80,24 +76,23 @@ module.exports = (sequelize) => {
8076
type: Sequelize.STRING(255),
8177
allowNull: false
8278
},
83-
createdAt: {
84-
field: 'created_at',
85-
type: Sequelize.DATE,
86-
allowNull: false
87-
},
8879
createdBy: {
8980
field: 'created_by',
9081
type: Sequelize.UUID,
9182
allowNull: false
9283
},
93-
updatedAt: {
94-
field: 'updated_at',
95-
type: Sequelize.DATE
96-
},
9784
updatedBy: {
9885
field: 'updated_by',
9986
type: Sequelize.UUID
10087
},
88+
createdAt: {
89+
field: 'created_at',
90+
type: Sequelize.DATE,
91+
},
92+
updatedAt: {
93+
field: 'updated_at',
94+
type: Sequelize.DATE
95+
},
10196
deletedAt: {
10297
field: 'deleted_at',
10398
type: Sequelize.DATE
@@ -107,7 +102,21 @@ module.exports = (sequelize) => {
107102
schema: config.DB_SCHEMA_NAME,
108103
sequelize,
109104
tableName: 'resource_bookings',
110-
timestamps: false
105+
paranoid: true,
106+
deletedAt: 'deletedAt',
107+
createdAt: 'createdAt',
108+
updatedAt: 'updatedAt',
109+
timestamps: true,
110+
defaultScope: {
111+
attributes: {
112+
exclude: ['deletedAt']
113+
}
114+
},
115+
hooks: {
116+
afterCreate: (resourceBooking) => {
117+
delete resourceBooking.dataValues.deletedAt
118+
}
119+
}
111120
}
112121
)
113122

src/services/JobCandidateService.js

Lines changed: 5 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -90,11 +90,10 @@ async function createJobCandidate (currentUser, jobCandidate) {
9090
await helper.ensureUserById(jobCandidate.userId) // ensure user exists
9191

9292
jobCandidate.id = uuid()
93-
jobCandidate.createdAt = new Date()
9493
jobCandidate.createdBy = await helper.getUserId(currentUser.userId)
9594

9695
const created = await JobCandidate.create(jobCandidate)
97-
await helper.postEvent(config.TAAS_JOB_CANDIDATE_CREATE_TOPIC, jobCandidate)
96+
await helper.postEvent(config.TAAS_JOB_CANDIDATE_CREATE_TOPIC, created.toJSON())
9897
return created.dataValues
9998
}
10099

@@ -126,11 +125,10 @@ async function updateJobCandidate (currentUser, id, data) {
126125
await helper.checkIsMemberOfProject(currentUser.userId, job.projectId)
127126
}
128127

129-
data.updatedAt = new Date()
130128
data.updatedBy = userId
131129

132-
await jobCandidate.update(data)
133-
await helper.postEvent(config.TAAS_JOB_CANDIDATE_UPDATE_TOPIC, { id, ...data })
130+
const updated = await jobCandidate.update(data)
131+
await helper.postEvent(config.TAAS_JOB_CANDIDATE_UPDATE_TOPIC, updated.toJSON())
134132
const result = _.assign(jobCandidate.dataValues, data)
135133
return result
136134
}
@@ -193,7 +191,7 @@ async function deleteJobCandidate (currentUser, id) {
193191
}
194192

195193
const jobCandidate = await JobCandidate.findById(id)
196-
await jobCandidate.update({ deletedAt: new Date() })
194+
await jobCandidate.destroy()
197195
await helper.postEvent(config.TAAS_JOB_CANDIDATE_DELETE_TOPIC, { id })
198196
}
199197

@@ -269,17 +267,12 @@ async function searchJobCandidates (currentUser, criteria) {
269267
logger.logFullError(err, { component: 'JobCandidateService', context: 'searchJobCandidates' })
270268
}
271269
logger.info({ component: 'JobCandidateService', context: 'searchJobCandidates', message: 'fallback to DB query' })
272-
const filter = {
273-
[Op.and]: [{ deletedAt: null }]
274-
}
270+
const filter = {}
275271
_.each(_.pick(criteria, ['jobId', 'userId', 'status', 'externalId']), (value, key) => {
276272
filter[Op.and].push({ [key]: value })
277273
})
278274
const jobCandidates = await JobCandidate.findAll({
279275
where: filter,
280-
attributes: {
281-
exclude: ['deletedAt']
282-
},
283276
offset: ((page - 1) * perPage),
284277
limit: perPage,
285278
order: [[criteria.sortBy, criteria.sortOrder]]

0 commit comments

Comments
 (0)