From 4f4ebc1e708be020cb885189b2a87f76665627ea Mon Sep 17 00:00:00 2001 From: imcaizheng Date: Sat, 9 Jan 2021 01:02:34 +0800 Subject: [PATCH] make some fields of Job optional --- docs/swagger.yaml | 12 --------- ...021-01-09-make-some-job-fields-optional.js | 26 +++++++++++++++++++ src/models/Job.js | 21 +++++---------- src/services/JobService.js | 26 +++++++++---------- 4 files changed, 46 insertions(+), 39 deletions(-) create mode 100644 migrations/2021-01-09-make-some-job-fields-optional.js diff --git a/docs/swagger.yaml b/docs/swagger.yaml index 85c2f429..85fb413a 100644 --- a/docs/swagger.yaml +++ b/docs/swagger.yaml @@ -1624,14 +1624,8 @@ components: required: - id - projectId - - externalId - - description - title - - startDate - - endDate - numPositions - - resourceType - - rateType - skills - status - createdAt @@ -1719,14 +1713,8 @@ components: JobRequestBody: required: - projectId - - externalId - - description - title - - startDate - - endDate - numPositions - - resourceType - - rateType - skills properties: projectId: diff --git a/migrations/2021-01-09-make-some-job-fields-optional.js b/migrations/2021-01-09-make-some-job-fields-optional.js new file mode 100644 index 00000000..88a7fc32 --- /dev/null +++ b/migrations/2021-01-09-make-some-job-fields-optional.js @@ -0,0 +1,26 @@ +/* + * Make Job fields externalId, description, startDate, endDate, resourceType, rateType and workload optional. + */ + +const targetFields = [ + 'external_id', + 'description', + 'start_date', + 'end_date', + 'resource_type', + 'rate_type', + 'workload' +] + +module.exports = { + up: queryInterface => { + return Promise.all(targetFields.map(field => + queryInterface.sequelize.query(`ALTER TABLE bookings.jobs ALTER COLUMN ${field} DROP NOT NULL`) + )) + }, + down: queryInterface => { + return Promise.all(targetFields.map(field => + queryInterface.sequelize.query(`ALTER TABLE bookings.jobs ALTER COLUMN ${field} SET NOT NULL`) + )) + } +} diff --git a/src/models/Job.js b/src/models/Job.js index 9184ac88..3e278a15 100644 --- a/src/models/Job.js +++ b/src/models/Job.js @@ -66,12 +66,10 @@ module.exports = (sequelize) => { }, externalId: { field: 'external_id', - type: Sequelize.STRING, - allowNull: false + type: Sequelize.STRING }, description: { - type: Sequelize.STRING, - allowNull: false + type: Sequelize.STRING }, title: { type: Sequelize.STRING, @@ -79,13 +77,11 @@ module.exports = (sequelize) => { }, startDate: { field: 'start_date', - type: Sequelize.DATE, - allowNull: false + type: Sequelize.DATE }, endDate: { field: 'end_date', - type: Sequelize.DATE, - allowNull: false + type: Sequelize.DATE }, numPositions: { field: 'num_positions', @@ -94,18 +90,15 @@ module.exports = (sequelize) => { }, resourceType: { field: 'resource_type', - type: Sequelize.STRING, - allowNull: false + type: Sequelize.STRING }, rateType: { field: 'rate_type', - type: Sequelize.STRING, - allowNull: false + type: Sequelize.STRING }, workload: { field: 'workload', - type: Sequelize.STRING, - allowNull: false + type: Sequelize.STRING }, skills: { type: Sequelize.JSONB, diff --git a/src/services/JobService.js b/src/services/JobService.js index e312a9b9..b298dfaf 100644 --- a/src/services/JobService.js +++ b/src/services/JobService.js @@ -163,15 +163,15 @@ createJob.schema = Joi.object().keys({ currentUser: Joi.object().required(), job: Joi.object().keys({ projectId: Joi.number().integer().required(), - externalId: Joi.string().required(), - description: Joi.string().required(), + externalId: Joi.string(), + description: Joi.string(), title: Joi.title().required(), - startDate: Joi.date().required(), - endDate: Joi.date().required(), + startDate: Joi.date(), + endDate: Joi.date(), numPositions: Joi.number().integer().min(1).required(), - resourceType: Joi.string().required(), + resourceType: Joi.string(), rateType: Joi.rateType(), - workload: Joi.workload().default('full-time'), + workload: Joi.workload(), skills: Joi.array().items(Joi.string().uuid()).required() }).required() }).required() @@ -253,15 +253,15 @@ fullyUpdateJob.schema = Joi.object().keys({ id: Joi.string().guid().required(), data: Joi.object().keys({ projectId: Joi.number().integer().required(), - externalId: Joi.string().required(), - description: Joi.string().required(), + externalId: Joi.string(), + description: Joi.string(), title: Joi.title().required(), - startDate: Joi.date().required(), - endDate: Joi.date().required(), + startDate: Joi.date(), + endDate: Joi.date(), numPositions: Joi.number().integer().min(1).required(), - resourceType: Joi.string().required(), - rateType: Joi.rateType().required(), - workload: Joi.workload().required(), + resourceType: Joi.string(), + rateType: Joi.rateType(), + workload: Joi.workload(), skills: Joi.array().items(Joi.string().uuid()).required(), status: Joi.jobStatus() }).required()