diff --git a/data/demo-data.json b/data/demo-data.json index ccf636a8..65d8e306 100644 --- a/data/demo-data.json +++ b/data/demo-data.json @@ -1325,6 +1325,7 @@ "externalId": "300234321", "resume": "http://example.com", "remark": "excellent", + "featured": null, "createdBy": "00000000-0000-0000-0000-000000000000", "updatedBy": "00000000-0000-0000-0000-000000000000", "createdAt": "2021-05-09T21:15:02.183Z", diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 98991993..43a9425b 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -213,6 +213,12 @@ paths: schema: type: boolean description: When passing true, the API will load all featured and showInHotList jobs at once + - in: query + name: featured + required: false + schema: + type: boolean + description: The featured jobs requestBody: content: application/json: diff --git a/src/services/JobService.js b/src/services/JobService.js index 382b1f12..9dee15ea 100644 --- a/src/services/JobService.js +++ b/src/services/JobService.js @@ -481,7 +481,8 @@ async function searchJobs (currentUser, criteria, options = { returnAll: false } 'minSalary', 'maxSalary', 'jobLocation', - 'specialJob' + 'specialJob', + 'featured' ]), (value, key) => { let must if (key === 'description' || key === 'title') { @@ -532,7 +533,22 @@ async function searchJobs (currentUser, criteria, options = { returnAll: false } } } } else { - return true + must = { + bool: { + must: [ + { + term: { + featured: value + } + }, + { + term: { + showInHotList: value + } + } + ] + } + } } } else { must = { @@ -601,7 +617,8 @@ async function searchJobs (currentUser, criteria, options = { returnAll: false } 'resourceType', 'rateType', 'workload', - 'status' + 'status', + 'featured' ]), (value, key) => { filter[Op.and].push({ [key]: value }) }) @@ -674,6 +691,10 @@ async function searchJobs (currentUser, criteria, options = { returnAll: false } ] }) } + if (criteria.specialJob === false) { + filter[Op.and].push({ featured: false }) + filter[Op.and].push({ showInHotList: false }) + } const jobs = await Job.findAll({ where: filter, offset: ((page - 1) * perPage), @@ -720,7 +741,8 @@ searchJobs.schema = Joi.object().keys({ minSalary: Joi.number().integer(), maxSalary: Joi.number().integer(), jobLocation: Joi.string(), - specialJob: Joi.boolean() + specialJob: Joi.boolean(), + featured: Joi.boolean() }).required(), options: Joi.object() }).required()