This commit is contained in:
pradeepkumar
2026-02-24 22:36:42 +05:30
parent d30358755e
commit 7ab5330a88
9 changed files with 390 additions and 3 deletions

View File

@@ -5,13 +5,17 @@ import {
ForbiddenException,
BadRequestException,
} from '@nestjs/common';
import { EventEmitter2 } from '@nestjs/event-emitter';
import { PrismaService } from '../prisma/prisma.service';
import { ConnectionStatus } from '@prisma/client';
import { CreateConnectionRequestDto, RespondConnectionRequestDto } from './dto';
@Injectable()
export class ConnectionRequestsService {
constructor(private prisma: PrismaService) {}
constructor(
private prisma: PrismaService,
private eventEmitter: EventEmitter2,
) {}
/**
* Create a new connection request from user to agent
@@ -66,7 +70,7 @@ export class ConnectionRequestsService {
}
if (existingRequest.status === ConnectionStatus.REJECTED) {
// Allow re-requesting after rejection by updating the existing request
return this.prisma.connectionRequest.update({
const updated = await this.prisma.connectionRequest.update({
where: { id: existingRequest.id },
data: {
status: ConnectionStatus.PENDING,
@@ -85,11 +89,28 @@ export class ConnectionRequestsService {
},
},
});
// Get sender name for notification
const userProfile = await this.prisma.userProfile.findUnique({
where: { userId },
select: { firstName: true, lastName: true },
});
const senderName = userProfile
? `${userProfile.firstName || ''} ${userProfile.lastName || ''}`.trim()
: 'A user';
this.eventEmitter.emit('notification.connection_request', {
recipientUserId: agentProfile.userId,
senderName,
connectionRequestId: updated.id,
});
return updated;
}
}
// Create new connection request
return this.prisma.connectionRequest.create({
const request = await this.prisma.connectionRequest.create({
data: {
userId,
agentProfileId: dto.agentProfileId,
@@ -105,8 +126,30 @@ export class ConnectionRequestsService {
avatar: true,
},
},
user: {
select: {
userProfile: {
select: { firstName: true, lastName: true },
},
},
},
},
});
// Emit push notification event for the agent
const senderName = request.user?.userProfile
? `${request.user.userProfile.firstName || ''} ${request.user.userProfile.lastName || ''}`.trim()
: 'A user';
this.eventEmitter.emit('notification.connection_request', {
recipientUserId: agentProfile.userId,
senderName,
connectionRequestId: request.id,
});
// Remove user data from response (not needed by caller)
const { user: _user, ...result } = request;
return result;
}
/**