feat(server): send review request when team member count over quota limit (#11126)

This commit is contained in:
fengmk2
2025-03-25 06:51:26 +00:00
parent 36eb4991c9
commit 9bad6fa12d
3 changed files with 134 additions and 33 deletions
@@ -610,38 +610,8 @@ export class WorkspaceResolver {
`workspace:inviteLink:${workspaceId}`
);
if (invite?.inviteId === inviteId) {
const seatAvailable = await this.quota.tryCheckSeat(workspaceId);
if (seatAvailable) {
const invite = await this.models.workspaceUser.set(
workspaceId,
user.id,
WorkspaceRole.Collaborator,
WorkspaceMemberStatus.UnderReview
);
await this.workspaceService.sendReviewRequestNotification(invite.id);
return true;
} else {
const isTeam =
await this.workspaceService.isTeamWorkspace(workspaceId);
// only team workspace allow over limit
if (isTeam) {
await this.models.workspaceUser.set(
workspaceId,
user.id,
WorkspaceRole.Collaborator,
WorkspaceMemberStatus.NeedMoreSeatAndReview
);
const memberCount =
await this.models.workspaceUser.count(workspaceId);
this.event.emit('workspace.members.updated', {
workspaceId,
count: memberCount,
});
return true;
} else {
throw new MemberQuotaExceeded();
}
}
await this.acceptInviteByLink(user, workspaceId);
return true;
}
}
@@ -650,6 +620,40 @@ export class WorkspaceResolver {
return true;
}
private async acceptInviteByLink(user: CurrentUser, workspaceId: string) {
const seatAvailable = await this.quota.tryCheckSeat(workspaceId);
if (seatAvailable) {
const role = await this.models.workspaceUser.set(
workspaceId,
user.id,
WorkspaceRole.Collaborator,
WorkspaceMemberStatus.UnderReview
);
await this.workspaceService.sendReviewRequestNotification(role.id);
return;
}
const isTeam = await this.workspaceService.isTeamWorkspace(workspaceId);
// only team workspace allow over limit
if (isTeam) {
const role = await this.models.workspaceUser.set(
workspaceId,
user.id,
WorkspaceRole.Collaborator,
WorkspaceMemberStatus.NeedMoreSeatAndReview
);
await this.workspaceService.sendReviewRequestNotification(role.id);
const memberCount = await this.models.workspaceUser.count(workspaceId);
this.event.emit('workspace.members.updated', {
workspaceId,
count: memberCount,
});
return;
}
throw new MemberQuotaExceeded();
}
@Mutation(() => Boolean)
async leaveWorkspace(
@CurrentUser() user: CurrentUser,