Skip to content

Commit 562b6b4

Browse files
Merge pull request #24 from topcoder-platform/dev
[PROD] Release 1.5
2 parents f66d8d4 + a3baa42 commit 562b6b4

5 files changed

+34
-92
lines changed

src/bootstrap.js

+4
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,10 @@ Joi.jobStatus = () => Joi.string().valid('sourcing', 'in-review', 'assigned', 'c
99
Joi.jobCandidateStatus = () => Joi.string().valid('open', 'selected', 'shortlist', 'rejected', 'cancelled', 'interview')
1010
Joi.workload = () => Joi.string().valid('full-time', 'fractional')
1111
Joi.title = () => Joi.string().max(128)
12+
// Empty string is not allowed by Joi by default and must be enabled with allow('').
13+
// See https://joi.dev/api/?v=17.3.0#string fro details why it's like this.
14+
// In many cases we would like to allow empty string to make it easier to create UI for editing data.
15+
Joi.stringAllowEmpty = () => Joi.string().allow('')
1216

1317
const zapierSwitch = Joi.string().label('ZAPIER_SWITCH').valid(...Object.values(constants.Zapier.Switch))
1418

src/scripts/createIndex.js

+1-1
Original file line numberDiff line numberDiff line change
@@ -20,7 +20,7 @@ async function createIndex () {
2020
description: { type: 'text' },
2121
title: { type: 'text' },
2222
startDate: { type: 'date' },
23-
endDate: { type: 'date' },
23+
duration: { type: 'integer' },
2424
numPositions: { type: 'integer' },
2525
resourceType: { type: 'keyword' },
2626
rateType: { type: 'keyword' },

src/services/JobCandidateProcessorService.js

+7-24
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
* Jobcandidate Processor Service
33
*/
44

5-
const _ = require('lodash')
65
const Joi = require('@hapi/joi')
76
const logger = require('../common/logger')
87
const helper = require('../common/helper')
@@ -80,7 +79,7 @@ async function processCreate (message, transactionId) {
8079
index: config.get('esConfig.ES_INDEX_JOB_CANDIDATE'),
8180
id: jobcandidate.id,
8281
transactionId,
83-
body: _.omit(jobcandidate, 'id'),
82+
body: jobcandidate,
8483
refresh: constants.esRefreshOption
8584
})
8685
}
@@ -97,9 +96,11 @@ processCreate.schema = {
9796
userId: Joi.string().uuid().required(),
9897
createdAt: Joi.date().required(),
9998
createdBy: Joi.string().uuid().required(),
99+
updatedAt: Joi.date().allow(null),
100+
updatedBy: Joi.string().uuid().allow(null),
100101
status: Joi.jobCandidateStatus().required(),
101-
externalId: Joi.string(),
102-
resume: Joi.string().uri()
102+
externalId: Joi.string().allow(null),
103+
resume: Joi.string().uri().allow(null)
103104
}).required()
104105
}).required(),
105106
transactionId: Joi.string().required()
@@ -117,7 +118,7 @@ async function processUpdate (message, transactionId) {
117118
id: data.id,
118119
transactionId,
119120
body: {
120-
doc: _.omit(data, ['id'])
121+
doc: data
121122
},
122123
refresh: constants.esRefreshOption
123124
})
@@ -127,25 +128,7 @@ async function processUpdate (message, transactionId) {
127128
})
128129
}
129130

130-
processUpdate.schema = {
131-
message: Joi.object().keys({
132-
topic: Joi.string().required(),
133-
originator: Joi.string().required(),
134-
timestamp: Joi.date().required(),
135-
'mime-type': Joi.string().required(),
136-
payload: Joi.object().keys({
137-
id: Joi.string().uuid(),
138-
jobId: Joi.string().uuid(),
139-
userId: Joi.string().uuid(),
140-
status: Joi.jobCandidateStatus(),
141-
externalId: Joi.string(),
142-
resume: Joi.string().uri(),
143-
updatedAt: Joi.date(),
144-
updatedBy: Joi.string().uuid()
145-
}).required()
146-
}).required(),
147-
transactionId: Joi.string().required()
148-
}
131+
processUpdate.schema = processCreate.schema
149132

150133
/**
151134
* Process delete entity message

src/services/JobProcessorService.js

+12-36
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
* Job Processor Service
33
*/
44

5-
const _ = require('lodash')
65
const Joi = require('@hapi/joi')
76
const logger = require('../common/logger')
87
const helper = require('../common/helper')
@@ -51,7 +50,7 @@ async function processCreate (message, transactionId) {
5150
index: config.get('esConfig.ES_INDEX_JOB'),
5251
id: job.id,
5352
transactionId,
54-
body: _.omit(job, 'id'),
53+
body: job,
5554
refresh: constants.esRefreshOption
5655
})
5756
await postMessageToZapier({
@@ -69,18 +68,20 @@ processCreate.schema = {
6968
payload: Joi.object().keys({
7069
id: Joi.string().uuid().required(),
7170
projectId: Joi.number().integer().required(),
72-
externalId: Joi.string(),
73-
description: Joi.string(),
71+
externalId: Joi.string().allow(null),
72+
description: Joi.stringAllowEmpty().allow(null),
7473
title: Joi.title().required(),
75-
startDate: Joi.date(),
76-
endDate: Joi.date(),
74+
startDate: Joi.date().allow(null),
75+
duration: Joi.number().integer().min(1).allow(null),
7776
numPositions: Joi.number().integer().min(1).required(),
78-
resourceType: Joi.string(),
79-
rateType: Joi.rateType(),
80-
workload: Joi.workload(),
77+
resourceType: Joi.stringAllowEmpty().allow(null),
78+
rateType: Joi.rateType().allow(null),
79+
workload: Joi.workload().allow(null),
8180
skills: Joi.array().items(Joi.string().uuid()).required(),
8281
createdAt: Joi.date().required(),
8382
createdBy: Joi.string().uuid().required(),
83+
updatedAt: Joi.date().allow(null),
84+
updatedBy: Joi.string().uuid().allow(null),
8485
status: Joi.jobStatus().required()
8586
}).required()
8687
}).required(),
@@ -99,7 +100,7 @@ async function processUpdate (message, transactionId) {
99100
id: data.id,
100101
transactionId,
101102
body: {
102-
doc: _.omit(data, ['id'])
103+
doc: data
103104
},
104105
refresh: constants.esRefreshOption
105106
})
@@ -109,32 +110,7 @@ async function processUpdate (message, transactionId) {
109110
})
110111
}
111112

112-
processUpdate.schema = {
113-
message: Joi.object().keys({
114-
topic: Joi.string().required(),
115-
originator: Joi.string().required(),
116-
timestamp: Joi.date().required(),
117-
'mime-type': Joi.string().required(),
118-
payload: Joi.object().keys({
119-
id: Joi.string().uuid().required(),
120-
projectId: Joi.number().integer(),
121-
externalId: Joi.string(),
122-
description: Joi.string(),
123-
title: Joi.title(),
124-
startDate: Joi.date(),
125-
endDate: Joi.date(),
126-
numPositions: Joi.number().integer().min(1),
127-
resourceType: Joi.string(),
128-
rateType: Joi.rateType(),
129-
workload: Joi.workload(),
130-
skills: Joi.array().items(Joi.string().uuid()),
131-
status: Joi.jobStatus(),
132-
updatedAt: Joi.date(),
133-
updatedBy: Joi.string().uuid()
134-
}).required()
135-
}).required(),
136-
transactionId: Joi.string().required()
137-
}
113+
processUpdate.schema = processCreate.schema
138114

139115
/**
140116
* Process delete entity message

src/services/ResourceBookingProcessorService.js

+10-31
Original file line numberDiff line numberDiff line change
@@ -2,7 +2,6 @@
22
* ResourceBooking Processor Service
33
*/
44

5-
const _ = require('lodash')
65
const Joi = require('@hapi/joi')
76
const logger = require('../common/logger')
87
const helper = require('../common/helper')
@@ -22,7 +21,7 @@ async function processCreate (message, transactionId) {
2221
index: config.get('esConfig.ES_INDEX_RESOURCE_BOOKING'),
2322
id: resourcebooking.id,
2423
transactionId,
25-
body: _.omit(resourcebooking, 'id'),
24+
body: resourcebooking,
2625
refresh: constants.esRefreshOption
2726
})
2827
}
@@ -37,14 +36,16 @@ processCreate.schema = {
3736
id: Joi.string().uuid().required(),
3837
projectId: Joi.number().integer().required(),
3938
userId: Joi.string().uuid().required(),
40-
jobId: Joi.string().uuid(),
41-
startDate: Joi.date(),
42-
endDate: Joi.date(),
43-
memberRate: Joi.number(),
44-
customerRate: Joi.number(),
39+
jobId: Joi.string().uuid().allow(null),
40+
startDate: Joi.date().allow(null),
41+
endDate: Joi.date().allow(null),
42+
memberRate: Joi.number().allow(null),
43+
customerRate: Joi.number().allow(null),
4544
rateType: Joi.rateType().required(),
4645
createdAt: Joi.date().required(),
4746
createdBy: Joi.string().uuid().required(),
47+
updatedAt: Joi.date().allow(null),
48+
updatedBy: Joi.string().uuid().allow(null),
4849
status: Joi.jobStatus().required()
4950
}).required()
5051
}).required(),
@@ -63,35 +64,13 @@ async function processUpdate (message, transactionId) {
6364
id: data.id,
6465
transactionId,
6566
body: {
66-
doc: _.omit(data, ['id'])
67+
doc: data
6768
},
6869
refresh: constants.esRefreshOption
6970
})
7071
}
7172

72-
processUpdate.schema = {
73-
message: Joi.object().keys({
74-
topic: Joi.string().required(),
75-
originator: Joi.string().required(),
76-
timestamp: Joi.date().required(),
77-
'mime-type': Joi.string().required(),
78-
payload: Joi.object().keys({
79-
id: Joi.string().uuid().required(),
80-
projectId: Joi.number().integer(),
81-
userId: Joi.string().uuid(),
82-
jobId: Joi.string().uuid(),
83-
startDate: Joi.date(),
84-
endDate: Joi.date(),
85-
memberRate: Joi.number(),
86-
customerRate: Joi.number(),
87-
rateType: Joi.rateType(),
88-
status: Joi.jobStatus(),
89-
updatedAt: Joi.date(),
90-
updatedBy: Joi.string().uuid()
91-
}).required()
92-
}).required(),
93-
transactionId: Joi.string().required()
94-
}
73+
processUpdate.schema = processCreate.schema
9574

9675
/**
9776
* Process delete entity message

0 commit comments

Comments
 (0)