mirror of
https://github.com/Tria-plc/edr-platform.git
synced 2026-08-29 08:20:58 +00:00
Merge pull request #534 from Tria-plc/freight/feat/chat-app
fix: backoffice socket
This commit is contained in:
@@ -7,7 +7,6 @@ import {
|
|||||||
import { Server, Socket } from 'socket.io';
|
import { Server, Socket } from 'socket.io';
|
||||||
import { Passenger as PassengerTypes } from '@edr/types';
|
import { Passenger as PassengerTypes } from '@edr/types';
|
||||||
|
|
||||||
import { PrismaService } from '../../common/prisma.service';
|
|
||||||
import { WsAuthService } from './ws-auth.service';
|
import { WsAuthService } from './ws-auth.service';
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@@ -34,27 +33,24 @@ export class SupportGateway implements OnGatewayConnection {
|
|||||||
@WebSocketServer()
|
@WebSocketServer()
|
||||||
private readonly server!: Server;
|
private readonly server!: Server;
|
||||||
|
|
||||||
constructor(
|
constructor(private readonly wsAuth: WsAuthService) {}
|
||||||
private readonly wsAuth: WsAuthService,
|
|
||||||
private readonly prisma: PrismaService,
|
|
||||||
) {}
|
|
||||||
|
|
||||||
async handleConnection(socket: Socket): Promise<void> {
|
async handleConnection(socket: Socket): Promise<void> {
|
||||||
const userId = await this.wsAuth.resolveUserId(this.extractToken(socket));
|
const userId = await this.wsAuth.resolveUserId(this.extractToken(socket));
|
||||||
|
|
||||||
// Authenticated: passenger (own room) or backoffice staff (shared room).
|
// A valid token means a backoffice agent: the portal connects only with a
|
||||||
|
// device/guest id (never a token), so every token-authed socket is staff.
|
||||||
|
// Join the shared backoffice room — no passenger-row heuristic needed.
|
||||||
if (userId) {
|
if (userId) {
|
||||||
socket.data.userId = userId;
|
socket.data.userId = userId;
|
||||||
const passenger = await this.prisma.passenger.findUnique({
|
socket.data.side = 'AGENT';
|
||||||
where: { iamUserId: userId },
|
await socket.join(SupportGateway.BACKOFFICE_ROOM);
|
||||||
|
socket.emit('support:hello', {
|
||||||
|
side: 'AGENT',
|
||||||
|
room: SupportGateway.BACKOFFICE_ROOM,
|
||||||
|
userId,
|
||||||
});
|
});
|
||||||
if (passenger) {
|
this.logger.debug(`support socket ${socket.id} → AGENT (backoffice)`);
|
||||||
await socket.join(`user:${userId}`);
|
|
||||||
socket.data.side = 'USER';
|
|
||||||
} else {
|
|
||||||
await socket.join(SupportGateway.BACKOFFICE_ROOM);
|
|
||||||
socket.data.side = 'AGENT';
|
|
||||||
}
|
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -44,6 +44,20 @@ export function useSupportSocket(
|
|||||||
},
|
},
|
||||||
);
|
);
|
||||||
|
|
||||||
|
// Temporary diagnostics — remove once live delivery is confirmed.
|
||||||
|
socket.on('connect', () =>
|
||||||
|
console.warn('[support] agent socket connected', socket.id),
|
||||||
|
);
|
||||||
|
socket.on('connect_error', (err) =>
|
||||||
|
console.warn('[support] agent socket connect_error:', err.message),
|
||||||
|
);
|
||||||
|
socket.on('disconnect', (reason) =>
|
||||||
|
console.warn('[support] agent socket disconnected:', reason),
|
||||||
|
);
|
||||||
|
socket.on('support:hello', (info) =>
|
||||||
|
console.warn('[support] server assigned:', info),
|
||||||
|
);
|
||||||
|
|
||||||
socket.on(
|
socket.on(
|
||||||
Passenger.PASSENGER_SUPPORT_WS_EVENTS.MESSAGE_NEW,
|
Passenger.PASSENGER_SUPPORT_WS_EVENTS.MESSAGE_NEW,
|
||||||
(event: Passenger.PassengerSupportMessageEvent) => {
|
(event: Passenger.PassengerSupportMessageEvent) => {
|
||||||
|
|||||||
Reference in New Issue
Block a user