feat: Implement connection request response notifications and emit them upon status update.
This commit is contained in:
@@ -241,7 +241,7 @@ export class ConnectionRequestsService {
|
|||||||
throw new BadRequestException('This request has already been responded to');
|
throw new BadRequestException('This request has already been responded to');
|
||||||
}
|
}
|
||||||
|
|
||||||
return this.prisma.connectionRequest.update({
|
const updated = await this.prisma.connectionRequest.update({
|
||||||
where: { id: requestId },
|
where: { id: requestId },
|
||||||
data: {
|
data: {
|
||||||
status: dto.status as ConnectionStatus,
|
status: dto.status as ConnectionStatus,
|
||||||
@@ -257,6 +257,25 @@ export class ConnectionRequestsService {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
});
|
});
|
||||||
|
|
||||||
|
// Get agent name for notification
|
||||||
|
const agentProfile = await this.prisma.agentProfile.findUnique({
|
||||||
|
where: { id: agentProfileId },
|
||||||
|
select: { firstName: true, lastName: true },
|
||||||
|
});
|
||||||
|
const agentName = agentProfile
|
||||||
|
? `${agentProfile.firstName || ''} ${agentProfile.lastName || ''}`.trim()
|
||||||
|
: 'An agent';
|
||||||
|
|
||||||
|
// Notify the user about the accept/reject
|
||||||
|
this.eventEmitter.emit('notification.connection_response', {
|
||||||
|
recipientUserId: request.userId,
|
||||||
|
agentName,
|
||||||
|
status: dto.status,
|
||||||
|
connectionRequestId: requestId,
|
||||||
|
});
|
||||||
|
|
||||||
|
return updated;
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
|
|||||||
@@ -444,4 +444,33 @@ export class NotificationsService implements OnModuleInit {
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@OnEvent('notification.connection_response')
|
||||||
|
async handleConnectionResponseNotification(event: {
|
||||||
|
recipientUserId: string;
|
||||||
|
agentName: string;
|
||||||
|
status: string;
|
||||||
|
connectionRequestId: string;
|
||||||
|
}) {
|
||||||
|
const isAccepted = event.status === 'ACCEPTED';
|
||||||
|
const prefix = await this.getRoutePrefix(event.recipientUserId);
|
||||||
|
const actionUrl = isAccepted ? `${prefix}/message` : `${prefix}/profiles`;
|
||||||
|
|
||||||
|
await this.createAndSendNotification(
|
||||||
|
event.recipientUserId,
|
||||||
|
'connection',
|
||||||
|
isAccepted ? 'Connection Accepted' : 'Connection Declined',
|
||||||
|
isAccepted
|
||||||
|
? `${event.agentName} accepted your connection request. You can now send messages.`
|
||||||
|
: `${event.agentName} declined your connection request.`,
|
||||||
|
'new_lead_alerts',
|
||||||
|
actionUrl,
|
||||||
|
{
|
||||||
|
type: 'connection_response',
|
||||||
|
status: event.status,
|
||||||
|
connectionRequestId: event.connectionRequestId,
|
||||||
|
link: actionUrl,
|
||||||
|
},
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
Reference in New Issue
Block a user