From bfd4d48aa6cd5f19e4df6347317aeae5767efed4 Mon Sep 17 00:00:00 2001 From: xxcxy Date: Sat, 29 May 2021 16:08:49 +0800 Subject: [PATCH] Batch Payments - Part 1 - Scheduler --- src/bootstrap.js | 4 ++-- src/scripts/createIndex.js | 10 ++++++++++ src/services/WorkPeriodPaymentProcessorService.js | 9 ++++++++- test/common/testHelper.js | 3 ++- 4 files changed, 22 insertions(+), 4 deletions(-) diff --git a/src/bootstrap.js b/src/bootstrap.js index be0d1c8..2fa2265 100644 --- a/src/bootstrap.js +++ b/src/bootstrap.js @@ -12,13 +12,13 @@ global.Promise = require('bluebird') 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.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.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.workload = () => Joi.string().valid('full-time', 'fractional') Joi.title = () => Joi.string().max(128) Joi.paymentStatus = () => Joi.string().valid('pending', 'partially-completed', 'completed', 'cancelled') Joi.xaiTemplate = () => Joi.string().valid(...allowedXAITemplates) Joi.interviewStatus = () => Joi.string().valid(...allowedInterviewStatuses) -Joi.workPeriodPaymentStatus = () => Joi.string().valid('completed', 'cancelled') +Joi.workPeriodPaymentStatus = () => Joi.string().valid('completed', 'scheduled', 'in-progress', 'failed', 'cancelled') // Empty string is not allowed by Joi by default and must be enabled with allow(''). // See https://joi.dev/api/?v=17.3.0#string fro details why it's like this. // In many cases we would like to allow empty string to make it easier to create UI for editing data. diff --git a/src/scripts/createIndex.js b/src/scripts/createIndex.js index aae5c10..385c2a4 100644 --- a/src/scripts/createIndex.js +++ b/src/scripts/createIndex.js @@ -120,6 +120,16 @@ async function createIndex () { challengeId: { type: 'keyword' }, amount: { type: 'float' }, status: { type: 'keyword' }, + statusDetails: { + type: 'nested', + properties: { + errorMessage: { type: 'text' }, + errorCode: { type: 'integer' }, + retry: { type: 'integer' }, + step: { type: 'keyword' }, + challengeId: { type: 'keyword' } + } + }, billingAccountId: { type: 'integer' }, createdAt: { type: 'date' }, createdBy: { type: 'keyword' }, diff --git a/src/services/WorkPeriodPaymentProcessorService.js b/src/services/WorkPeriodPaymentProcessorService.js index 7f30b6e..a168ded 100644 --- a/src/services/WorkPeriodPaymentProcessorService.js +++ b/src/services/WorkPeriodPaymentProcessorService.js @@ -65,10 +65,17 @@ processCreate.schema = { payload: Joi.object().keys({ id: Joi.string().uuid().required(), workPeriodId: Joi.string().uuid().required(), - challengeId: Joi.string().uuid().required(), + challengeId: Joi.string().uuid().allow(null), amount: Joi.number().greater(0).allow(null), status: Joi.workPeriodPaymentStatus().required(), billingAccountId: Joi.number().allow(null), + statusDetails: Joi.object().keys({ + errorMessage: Joi.string().required(), + errorCode: Joi.number().integer().allow(null), + retry: Joi.number().integer().allow(null), + step: Joi.string().allow(null), + challengeId: Joi.string().uuid().allow(null) + }).unknown(true).allow(null), createdAt: Joi.date().required(), createdBy: Joi.string().uuid().required(), updatedAt: Joi.date().allow(null), diff --git a/test/common/testHelper.js b/test/common/testHelper.js index fd310d8..6410492 100644 --- a/test/common/testHelper.js +++ b/test/common/testHelper.js @@ -40,7 +40,8 @@ async function clearES () { query: { match_all: {} } - } + }, + refresh: true }) } }