From 32101ccd826779857ce8956c639dca5c2fb5d786 Mon Sep 17 00:00:00 2001 From: eisbilir Date: Tue, 18 May 2021 23:30:59 +0300 Subject: [PATCH 1/9] fix: not able to get RB without WB --- .../ResourceBookingEventHandler.js | 4 ++- src/services/ResourceBookingService.js | 28 +++++++++++-------- 2 files changed, 19 insertions(+), 13 deletions(-) diff --git a/src/eventHandlers/ResourceBookingEventHandler.js b/src/eventHandlers/ResourceBookingEventHandler.js index 3e8c18c3..ef5825fc 100644 --- a/src/eventHandlers/ResourceBookingEventHandler.js +++ b/src/eventHandlers/ResourceBookingEventHandler.js @@ -169,7 +169,9 @@ async function updateWorkPeriods (payload) { raw: true }) // gather workPeriod dates - const newWorkPeriods = helper.extractWorkPeriods(payload.value.startDate || payload.options.oldValue.startDate, payload.value.endDate || payload.options.oldValue.endDate) + const newWorkPeriods = helper.extractWorkPeriods( + _.isUndefined(payload.value.startDate) ? payload.options.oldValue.startDate : payload.value.startDate, + _.isUndefined(payload.value.endDate) ? payload.options.oldValue.endDate : payload.value.endDate) // find which workPeriods should be removed const workPeriodsToRemove = _.differenceBy(workPeriods, newWorkPeriods, 'startDate') // find which workperiods should be created diff --git a/src/services/ResourceBookingService.js b/src/services/ResourceBookingService.js index 81c21fda..b9c7be2d 100644 --- a/src/services/ResourceBookingService.js +++ b/src/services/ResourceBookingService.js @@ -194,7 +194,9 @@ async function _ensurePaidWorkPeriodsNotDeleted (resourceBookingId, oldValue, ne return } // gather workPeriod dates from provided dates - const newWorkPeriods = helper.extractWorkPeriods(newValue.startDate || oldValue.startDate, newValue.endDate || oldValue.endDate) + const newWorkPeriods = helper.extractWorkPeriods( + _.isUndefined(newValue.startDate) ? oldValue.startDate : newValue.startDate, + _.isUndefined(newValue.endDate) ? oldValue.endDate : newValue.endDate) // find which workPeriods should be removed const workPeriodsToRemove = _.differenceBy(workPeriods, newWorkPeriods, 'startDate') // we can't delete workperiods with paymentStatus 'partially-completed' or 'completed'. @@ -477,14 +479,7 @@ async function searchResourceBookings (currentUser, criteria, options = { return body: { query: { bool: { - must: [ - { - nested: { - path: 'workPeriods', - query: { bool: { must: [] } } - } - } - ] + must: [] } }, from: (page - 1) * perPage, @@ -525,9 +520,18 @@ async function searchResourceBookings (currentUser, criteria, options = { return } }] } + const workPeriodFilters = ['workPeriods.paymentStatus', 'workPeriods.startDate', 'workPeriods.endDate', 'workPeriods.userHandle'] + if (_.includes(criteria, workPeriodFilters)) { + esQuery.body.query.bool.must.push({ + nested: { + path: 'workPeriods', + query: { bool: { must: [] } } + } + }) + } // Apply WorkPeriod filters - _.each(_.pick(criteria, ['workPeriods.paymentStatus', 'workPeriods.startDate', 'workPeriods.endDate', 'workPeriods.userHandle']), (value, key) => { - esQuery.body.query.bool.must[0].nested.query.bool.must.push({ + _.each(_.pick(criteria, workPeriodFilters), (value, key) => { + esQuery.body.query.bool.must[esQuery.body.query.bool.must.length - 1].nested.query.bool.must.push({ term: { [key]: { value @@ -541,7 +545,7 @@ async function searchResourceBookings (currentUser, criteria, options = { return let resourceBookings = _.map(body.hits.hits, '_source') // ESClient will return ResourceBookings with it's all nested WorkPeriods // We re-apply WorkPeriod filters - _.each(_.pick(criteria, ['workPeriods.startDate', 'workPeriods.endDate', 'workPeriods.userHandle', 'workPeriods.paymentStatus']), (value, key) => { + _.each(_.pick(criteria, workPeriodFilters), (value, key) => { key = key.split('.')[1] _.each(resourceBookings, r => { r.workPeriods = _.filter(r.workPeriods, { [key]: value }) From 4de085d3192c98fc669bea71bf34b6f885b0a11f Mon Sep 17 00:00:00 2001 From: nkumar-topcoder <33625707+nkumar-topcoder@users.noreply.github.com> Date: Wed, 19 May 2021 15:27:34 +0530 Subject: [PATCH 2/9] BA is to string [skip ci] BA is to string [skip ci] --- src/services/PaymentService.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/PaymentService.js b/src/services/PaymentService.js index 3143b936..2dcd8b04 100644 --- a/src/services/PaymentService.js +++ b/src/services/PaymentService.js @@ -84,7 +84,7 @@ async function createChallenge (challenge, token) { if (challenge.billingAccountId) { body.billing = { - billingAccountId: challenge.billingAccountId, + billingAccountId: _.toString(challenge.billingAccountId), markup: 0 // for TaaS payments we always use 0 markup } } From 6a894b71aa1d472f29be2691e25f181a1506df54 Mon Sep 17 00:00:00 2001 From: nkumar-topcoder <33625707+nkumar-topcoder@users.noreply.github.com> Date: Wed, 19 May 2021 15:36:55 +0530 Subject: [PATCH 3/9] BA number to string --- src/services/PaymentService.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/PaymentService.js b/src/services/PaymentService.js index 2dcd8b04..d06ad671 100644 --- a/src/services/PaymentService.js +++ b/src/services/PaymentService.js @@ -85,7 +85,7 @@ async function createChallenge (challenge, token) { if (challenge.billingAccountId) { body.billing = { billingAccountId: _.toString(challenge.billingAccountId), - markup: 0 // for TaaS payments we always use 0 markup + markup: 0 // for TaaS payments we always use 0 markup } } try { From 7783aa321fea82ec9c9b1b320b81f4fcb0b34747 Mon Sep 17 00:00:00 2001 From: Sushil Shinde Date: Fri, 21 May 2021 17:35:18 +0530 Subject: [PATCH 4/9] Adding statuses --- src/bootstrap.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/bootstrap.js b/src/bootstrap.js index 6a364e8a..2999f131 100644 --- a/src/bootstrap.js +++ b/src/bootstrap.js @@ -16,7 +16,7 @@ Joi.rateType = () => Joi.string().valid('hourly', 'daily', 'weekly', 'monthly') Joi.jobStatus = () => Joi.string().valid('sourcing', 'in-review', 'assigned', 'closed', 'cancelled') Joi.resourceBookingStatus = () => Joi.string().valid('placed', 'closed', 'cancelled') Joi.workload = () => Joi.string().valid('full-time', 'fractional') -Joi.jobCandidateStatus = () => Joi.string().valid('open', 'placed', 'selected', 'client rejected - screening', 'client rejected - interview', 'rejected - other', 'cancelled', 'interview', 'topcoder-rejected') +Joi.jobCandidateStatus = () => Joi.string().valid('open', 'placed', 'selected', 'client rejected - screening', 'client rejected - interview', 'rejected - other', 'cancelled', 'interview', 'topcoder-rejected', 'applied','rejected-pre-screen','skills-test','skills-test','phone-screen','job-closed') Joi.title = () => Joi.string().max(128) Joi.paymentStatus = () => Joi.string().valid('pending', 'partially-completed', 'completed', 'cancelled') Joi.xaiTemplate = () => Joi.string().valid(...allowedXAITemplate) From ba0af40d929132fb438ca68ea59013b7e24472a3 Mon Sep 17 00:00:00 2001 From: Maksym Mykhailenko Date: Sat, 22 May 2021 23:21:28 +0300 Subject: [PATCH 5/9] fix: return pagination headers when fallback to DB --- src/common/helper.js | 3 --- 1 file changed, 3 deletions(-) diff --git a/src/common/helper.js b/src/common/helper.js index 234e96fe..f7bcb148 100644 --- a/src/common/helper.js +++ b/src/common/helper.js @@ -599,9 +599,6 @@ function getPageLink (req, page) { * @param {Object} result the operation result */ function setResHeaders (req, res, result) { - if (result.fromDb) { - return - } const totalPages = Math.ceil(result.total / result.perPage) if (result.page > 1) { res.set('X-Prev-Page', result.page - 1) From 479b790737c24d63c4e5c2759676ae25d041b067 Mon Sep 17 00:00:00 2001 From: Maksym Mykhailenko Date: Sat, 22 May 2021 23:24:24 +0300 Subject: [PATCH 6/9] fix: filter WorkPeriods in RB endpoint before this fix it returned error like 'cannot get "nested" of undefined' --- src/services/ResourceBookingService.js | 26 ++++++++++++++------------ 1 file changed, 14 insertions(+), 12 deletions(-) diff --git a/src/services/ResourceBookingService.js b/src/services/ResourceBookingService.js index b9c7be2d..d8fd2e5c 100644 --- a/src/services/ResourceBookingService.js +++ b/src/services/ResourceBookingService.js @@ -520,25 +520,27 @@ async function searchResourceBookings (currentUser, criteria, options = { return } }] } + // Apply WorkPeriod filters const workPeriodFilters = ['workPeriods.paymentStatus', 'workPeriods.startDate', 'workPeriods.endDate', 'workPeriods.userHandle'] - if (_.includes(criteria, workPeriodFilters)) { + if (_.intersection(criteria, workPeriodFilters).length > 0) { + const workPeriodsMust = [] + _.each(_.pick(criteria, workPeriodFilters), (value, key) => { + workPeriodsMust.push({ + term: { + [key]: { + value + } + } + }) + }) + esQuery.body.query.bool.must.push({ nested: { path: 'workPeriods', - query: { bool: { must: [] } } + query: { bool: { must: workPeriodsMust } } } }) } - // Apply WorkPeriod filters - _.each(_.pick(criteria, workPeriodFilters), (value, key) => { - esQuery.body.query.bool.must[esQuery.body.query.bool.must.length - 1].nested.query.bool.must.push({ - term: { - [key]: { - value - } - } - }) - }) logger.debug({ component: 'ResourceBookingService', context: 'searchResourceBookings', message: `Query: ${JSON.stringify(esQuery)}` }) const { body } = await esClient.search(esQuery) From cb73c9931a1a06011a3e0c0fa73d554226e21de0 Mon Sep 17 00:00:00 2001 From: Maksym Mykhailenko Date: Sun, 23 May 2021 11:32:17 +0300 Subject: [PATCH 7/9] chore: force fallback to DB in RB requests --- src/services/ResourceBookingService.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/services/ResourceBookingService.js b/src/services/ResourceBookingService.js index d8fd2e5c..5d1bd085 100644 --- a/src/services/ResourceBookingService.js +++ b/src/services/ResourceBookingService.js @@ -472,6 +472,7 @@ async function searchResourceBookings (currentUser, criteria, options = { return criteria.sortOrder = 'desc' } try { + throw new Error('fallback to DB') const esQuery = { index: config.get('esConfig.ES_INDEX_RESOURCE_BOOKING'), _source_includes: queryOpt.include, From 5790aba6b2866286dd900a4973f5c3999b19e9f6 Mon Sep 17 00:00:00 2001 From: Maksym Mykhailenko Date: Sun, 23 May 2021 11:39:24 +0300 Subject: [PATCH 8/9] fix: perPage from DB --- src/services/ResourceBookingService.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/services/ResourceBookingService.js b/src/services/ResourceBookingService.js index 5d1bd085..bab63925 100644 --- a/src/services/ResourceBookingService.js +++ b/src/services/ResourceBookingService.js @@ -618,7 +618,7 @@ async function searchResourceBookings (currentUser, criteria, options = { return } else { queryCriteria.order = [[{ model: WorkPeriod, as: 'workPeriods' }, _.split(criteria.sortBy, '.')[1], criteria.sortOrder]] } - const resourceBookings = await ResourceBooking.findAll(queryCriteria) + const resourceBookings = await ResourceBooking.findAll(_.omit(queryCriteria, ['limit', 'offset'])) return { fromDb: true, total: resourceBookings.length, From 39527ad4cd98ad816e23f47773fee5a9f635bf93 Mon Sep 17 00:00:00 2001 From: Maksym Mykhailenko Date: Sun, 23 May 2021 13:24:22 +0300 Subject: [PATCH 9/9] fix: "total" value and DB pagination --- src/services/ResourceBookingService.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/src/services/ResourceBookingService.js b/src/services/ResourceBookingService.js index bab63925..f5c40206 100644 --- a/src/services/ResourceBookingService.js +++ b/src/services/ResourceBookingService.js @@ -618,10 +618,11 @@ async function searchResourceBookings (currentUser, criteria, options = { return } else { queryCriteria.order = [[{ model: WorkPeriod, as: 'workPeriods' }, _.split(criteria.sortBy, '.')[1], criteria.sortOrder]] } - const resourceBookings = await ResourceBooking.findAll(_.omit(queryCriteria, ['limit', 'offset'])) + const resourceBookings = await ResourceBooking.findAll(queryCriteria) + const total = await ResourceBooking.count(_.omit(queryCriteria, ['limit', 'offset', 'attributes', 'order'])) return { fromDb: true, - total: resourceBookings.length, + total, page, perPage, result: resourceBookings