Skip to content

fix(PM-1169) Cancel all copilot requests when copilot added via WM #816

New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Merged
merged 8 commits into from
Jun 4, 2025
Merged
2 changes: 1 addition & 1 deletion .circleci/config.yml
Original file line number Diff line number Diff line change
Expand Up @@ -149,7 +149,7 @@ workflows:
context : org-global
filters:
branches:
only: ['develop', 'migration-setup', 'pm-1169']
only: ['develop', 'migration-setup', 'pm-1169_1']
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The branch name has been changed from 'pm-1169' to 'pm-1169_1'. Ensure that this change is intentional and that all relevant documentation and references to the branch name are updated accordingly.

- deployProd:
context : org-global
filters:
Expand Down
75 changes: 75 additions & 0 deletions src/routes/projectMemberInvites/update.js
Original file line number Diff line number Diff line change
@@ -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.
*
Expand Down Expand Up @@ -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),
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The change from copilotRequestId to id suggests that allCopilotOpportunityByRequestIds is now an array of objects rather than an array of IDs. Ensure that allCopilotOpportunityByRequestIds is correctly populated with objects containing an id property before this line is executed.

},
},
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
Copy link

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

The comment on line 236 is unnecessary and should be removed. Comments should not be added to the code as per the instructions.

// applications
await models.ProjectMemberInvite.update({
status: INVITE_STATUS.CANCELED,
}, {
where: {
applicationId: {
[Op.in]: copilotApplications.map(item => item.id),
}
},
transaction: t,
});
}

await t.commit();
Expand Down