Skip to content

Commit

Permalink
fix: update slack home and slack message for team after review done b…
Browse files Browse the repository at this point in the history
…y one member
  • Loading branch information
christophehurpeau committed Jan 21, 2023
1 parent c276981 commit 534ef29
Show file tree
Hide file tree
Showing 2 changed files with 118 additions and 37 deletions.
13 changes: 13 additions & 0 deletions src/context/accountContext.ts
Expand Up @@ -37,6 +37,7 @@ export interface AccountContext<
getTeamGroup: (teamName: string) => GroupNames | undefined;
getGithubTeamsGroups: (teamNames: string[]) => GroupNames[];
getMembersForTeams: (teamIds: number[]) => Promise<AccountEmbedWithoutType[]>;
getGithubTeamsForMember: (memberId: number) => Promise<OrgMember['teams']>;
getTeamsForLogin: (githubLogin: string) => TeamNames[];
updateGithubTeamMembers: () => Promise<void>;
approveShouldWait: (
Expand Down Expand Up @@ -212,6 +213,18 @@ const initAccountContext = async <
const orgMembers = await cursor.toArray();
return orgMembers.map((member) => member.user);
},
getGithubTeamsForMember: async (memberId): Promise<OrgMember['teams']> => {
if (accountInfo.type !== 'Organization') {
throw new Error(
`Invalid account type "${accountInfo.type}" for getTeamsForMember`,
);
}
const orgMember = await appContext.mongoStores.orgMembers.findOne({
'org.id': account._id,
'user.id': memberId,
});
return orgMember ? orgMember.teams : [];
},
updateGithubTeamMembers,

approveShouldWait: (
Expand Down
142 changes: 105 additions & 37 deletions src/events/pr-handlers/reviewSubmitted.ts
Expand Up @@ -71,10 +71,11 @@ export default function reviewSubmitted(
html_url: reviewUrl,
} = payload.review;

const { reviewers, reviewStates } = await getReviewersAndReviewStates(
context,
repoContext,
);
const [{ reviewers, reviewStates }, reviewerGithubTeams] =
await Promise.all([
getReviewersAndReviewStates(context, repoContext),
repoContext.getGithubTeamsForMember(reviewer.id),
]);
const { owner, assignees, followers } =
getRolesFromPullRequestAndReviewers(pullRequest, reviewers, {
excludeIds: [reviewer.id],
Expand Down Expand Up @@ -168,51 +169,118 @@ export default function reviewSubmitted(
}
}

if (assignees) {
assignees.forEach((assignee) => {
repoContext.slack.updateHome(assignee.login);
});
}
repoContext.slack.updateHome(reviewer.login);
const createTeamsRegex = () => {
if (reviewerGithubTeams.length === 1) {
return reviewerGithubTeams[0].id;
}
return `(${reviewerGithubTeams.map((team) => team.id).join('|')})`;
};

const sentMessageRequestedReview =
await appContext.mongoStores.slackSentMessages.findOne(
const [
sentMessageRequestedReview,
sentMessageRequestedReviewForReviewerTeams,
] = await Promise.all([
appContext.mongoStores.slackSentMessages.findOne(
{
'account.id': repoContext.accountEmbed.id,
'account.type': repoContext.accountEmbed.type,
type: 'review-requested',
typeId: `${pullRequest.id}_${reviewer.id}`,
},
{ created: -1 },
);
),
reviewerGithubTeams.length > 0
? appContext.mongoStores.slackSentMessages.findAll(
{
'account.id': repoContext.accountEmbed.id,
'account.type': repoContext.accountEmbed.type,
type: 'review-requested',
typeId: {
$regex: `^${pullRequest.id}_${createTeamsRegex()}_`,
},
},
{ created: -1 },
)
: [],
]);

repoContext.slack.updateHome(reviewer.login);
if (assignees) {
assignees.forEach((assignee) => {
repoContext.slack.updateHome(assignee.login);
});
}

for (const sentMessageRequestedReviewForReviewerTeam of sentMessageRequestedReviewForReviewerTeams) {
for (const {
user,
} of sentMessageRequestedReviewForReviewerTeam.sentTo) {
repoContext.slack.updateHome(user.login);
}
}

const emoji = getEmojiFromState(state);

if (sentMessageRequestedReview) {
const message = sentMessageRequestedReview.message;
if (
sentMessageRequestedReview ||
sentMessageRequestedReviewForReviewerTeams.length > 0
) {
await Promise.all([
...sentMessageRequestedReview.sentTo.map((sentTo) => [
repoContext.slack.updateMessage(
sentTo.user,
sentTo.ts,
sentTo.channel,
{
...message,
text: message.text
.split('\n')
.map((l) => `~${l}~`)
.join('\n'),
},
),
repoContext.slack.addReaction(
sentTo.user,
sentTo.ts,
sentTo.channel,
emoji,
),
]),
appContext.mongoStores.slackSentMessages.deleteOne(
sentMessageRequestedReview,
...(sentMessageRequestedReview
? [
...sentMessageRequestedReview.sentTo.map((sentTo) => [
repoContext.slack.updateMessage(
sentTo.user,
sentTo.ts,
sentTo.channel,
{
...sentMessageRequestedReview.message,
text: sentMessageRequestedReview.message.text
.split('\n')
.map((l) => `~${l}~`)
.join('\n'),
},
),
repoContext.slack.addReaction(
sentTo.user,
sentTo.ts,
sentTo.channel,
emoji,
),
]),
appContext.mongoStores.slackSentMessages.deleteOne(
sentMessageRequestedReview,
),
]
: []),
...sentMessageRequestedReviewForReviewerTeams.flatMap(
(sentMessageRequestedReviewForReviewerTeam) => [
...sentMessageRequestedReviewForReviewerTeam.sentTo.map(
(sentTo) => [
repoContext.slack.updateMessage(
sentTo.user,
sentTo.ts,
sentTo.channel,
{
...sentMessageRequestedReviewForReviewerTeam.message,
text: sentMessageRequestedReviewForReviewerTeam.message.text
.split('\n')
.map((l) => `~${l}~`)
.join('\n'),
},
),
repoContext.slack.addReaction(
sentTo.user,
sentTo.ts,
sentTo.channel,
emoji,
),
],
),
appContext.mongoStores.slackSentMessages.deleteOne(
sentMessageRequestedReviewForReviewerTeam,
),
],
),
]);
}
Expand Down

0 comments on commit 534ef29

Please sign in to comment.