fix(server): event handler bindings (#10165)

This commit is contained in:
forehalo
2025-02-14 11:29:02 +00:00
parent 42e0563d2e
commit 3dde47dd08
18 changed files with 486 additions and 260 deletions
@@ -34,7 +34,7 @@ import { DocID } from '../utils/doc';
const SubscribeMessage = (event: string) =>
applyDecorators(
GatewayErrorWrapper(event),
CallMetric('socketio', 'event_duration', undefined, { event }),
CallMetric('socketio', 'event_duration', { event }),
RawSubscribeMessage(event)
);
@@ -0,0 +1,81 @@
import { Injectable } from '@nestjs/common';
import { OnEvent } from '../../base';
import { Models } from '../../models';
import { WorkspaceService } from './resolvers/service';
@Injectable()
export class WorkspaceEvents {
constructor(
private readonly workspaceService: WorkspaceService,
private readonly models: Models
) {}
@OnEvent('workspace.members.reviewRequested')
async onReviewRequested({
inviteId,
}: Events['workspace.members.reviewRequested']) {
// send review request mail to owner and admin
await this.workspaceService.sendReviewRequestedEmail(inviteId);
}
@OnEvent('workspace.members.requestApproved')
async onApproveRequest({
inviteId,
}: Events['workspace.members.requestApproved']) {
// send approve mail
await this.workspaceService.sendReviewApproveEmail(inviteId);
}
@OnEvent('workspace.members.requestDeclined')
async onDeclineRequest({
userId,
workspaceId,
}: Events['workspace.members.requestDeclined']) {
const user = await this.models.user.getPublicUser(userId);
// send decline mail
await this.workspaceService.sendReviewDeclinedEmail(
user?.email,
workspaceId
);
}
@OnEvent('workspace.members.roleChanged')
async onRoleChanged({
userId,
workspaceId,
permission,
}: Events['workspace.members.roleChanged']) {
// send role changed mail
await this.workspaceService.sendRoleChangedEmail(userId, {
id: workspaceId,
role: permission,
});
}
@OnEvent('workspace.members.ownershipTransferred')
async onOwnerTransferred({
workspaceId,
from,
to,
}: Events['workspace.members.ownershipTransferred']) {
// send ownership transferred mail
const fromUser = await this.models.user.getPublicUser(from);
const toUser = await this.models.user.getPublicUser(to);
if (fromUser) {
await this.workspaceService.sendOwnershipTransferredEmail(
fromUser.email,
{
id: workspaceId,
}
);
}
if (toUser) {
await this.workspaceService.sendOwnershipReceivedEmail(toUser.email, {
id: workspaceId,
});
}
}
}
@@ -8,6 +8,7 @@ import { QuotaModule } from '../quota';
import { StorageModule } from '../storage';
import { UserModule } from '../user';
import { WorkspacesController } from './controller';
import { WorkspaceEvents } from './event';
import {
DocHistoryResolver,
DocResolver,
@@ -37,6 +38,7 @@ import {
DocHistoryResolver,
WorkspaceBlobResolver,
WorkspaceService,
WorkspaceEvents,
],
exports: [WorkspaceService],
})
@@ -14,7 +14,6 @@ import {
Cache,
EventBus,
MemberNotFoundInSpace,
OnEvent,
RequestMutex,
TooManyRequest,
URLHelper,
@@ -350,72 +349,4 @@ export class TeamWorkspaceResolver {
return new TooManyRequest();
}
}
@OnEvent('workspace.members.reviewRequested')
async onReviewRequested({
inviteId,
}: Events['workspace.members.reviewRequested']) {
// send review request mail to owner and admin
await this.workspaceService.sendReviewRequestedEmail(inviteId);
}
@OnEvent('workspace.members.requestApproved')
async onApproveRequest({
inviteId,
}: Events['workspace.members.requestApproved']) {
// send approve mail
await this.workspaceService.sendReviewApproveEmail(inviteId);
}
@OnEvent('workspace.members.requestDeclined')
async onDeclineRequest({
userId,
workspaceId,
}: Events['workspace.members.requestDeclined']) {
const user = await this.models.user.getPublicUser(userId);
// send decline mail
await this.workspaceService.sendReviewDeclinedEmail(
user?.email,
workspaceId
);
}
@OnEvent('workspace.members.roleChanged')
async onRoleChanged({
userId,
workspaceId,
permission,
}: Events['workspace.members.roleChanged']) {
// send role changed mail
await this.workspaceService.sendRoleChangedEmail(userId, {
id: workspaceId,
role: permission,
});
}
@OnEvent('workspace.members.ownershipTransferred')
async onOwnerTransferred({
workspaceId,
from,
to,
}: Events['workspace.members.ownershipTransferred']) {
// send ownership transferred mail
const fromUser = await this.models.user.getPublicUser(from);
const toUser = await this.models.user.getPublicUser(to);
if (fromUser) {
await this.workspaceService.sendOwnershipTransferredEmail(
fromUser.email,
{
id: workspaceId,
}
);
}
if (toUser) {
await this.workspaceService.sendOwnershipReceivedEmail(toUser.email, {
id: workspaceId,
});
}
}
}