diff --git a/.circleci/config.yml b/.circleci/config.yml index 753c7b1e..d3aab5b3 100644 --- a/.circleci/config.yml +++ b/.circleci/config.yml @@ -149,7 +149,7 @@ workflows: context : org-global filters: branches: - only: ['develop', 'migration-setup', 'pm-1169'] + only: ['develop', 'migration-setup', 'pm-1169_1'] - deployProd: context : org-global filters: diff --git a/src/routes/projectMemberInvites/update.js b/src/routes/projectMemberInvites/update.js index 9dfbfdf0..7869f7e3 100644 --- a/src/routes/projectMemberInvites/update.js +++ b/src/routes/projectMemberInvites/update.js @@ -1,12 +1,14 @@ import validate from 'express-validation'; import _ from 'lodash'; import Joi from 'joi'; +import { Op } from 'sequelize'; import { middleware as tcMiddleware } from 'tc-core-library-js'; import models from '../../models'; import util from '../../util'; import { INVITE_STATUS, EVENT, RESOURCES, COPILOT_APPLICATION_STATUS, COPILOT_OPPORTUNITY_STATUS, COPILOT_REQUEST_STATUS, INVITE_SOURCE } from '../../constants'; import { PERMISSION } from '../../permissions/constants'; + /** * API to update invite member to project. * @@ -170,6 +172,79 @@ module.exports = [ }, { transaction: t, }); + } else if (source === INVITE_SOURCE.WORK_MANAGER) { + const allCopilotRequestsByProjectId = await models.CopilotRequest.findAll({ + where: { + projectId: invite.projectId, + }, + transaction: t, + }); + + const requestIds = allCopilotRequestsByProjectId.map(item => item.id); + + await models.CopilotRequest.update({ + status: COPILOT_REQUEST_STATUS.CANCELED, + }, { + where: { + id: { + [Op.in]: requestIds, + } + }, + transaction: t, + }); + + const allCopilotOpportunityByRequestIds = await models.CopilotOpportunity.findAll({ + where: { + copilotRequestId: { + [Op.in]: requestIds, + }, + }, + transaction: t, + }); + + await models.CopilotOpportunity.update({ + status: COPILOT_OPPORTUNITY_STATUS.CANCELED, + }, { + where: { + id: { + [Op.in]: allCopilotOpportunityByRequestIds.map(item => item.id), + }, + }, + transaction: t, + }); + + const copilotApplications = await models.CopilotApplication.findAll({ + where: { + opportunityId: { + [Op.in]: allCopilotOpportunityByRequestIds.map(item => item.id), + }, + }, + transaction: t, + }); + + await models.CopilotApplication.update({ + status: COPILOT_APPLICATION_STATUS.CANCELED, + }, { + where: { + id: { + [Op.in]: copilotApplications.map(item => item.id), + }, + }, + transaction: t, + }); + + // Cancel the existing invites which are opened via + // applications + await models.ProjectMemberInvite.update({ + status: INVITE_STATUS.CANCELED, + }, { + where: { + applicationId: { + [Op.in]: copilotApplications.map(item => item.id), + } + }, + transaction: t, + }); } await t.commit();