doctors.deletedMédico Deletado
Evento WebSocket para notificar em tempo real quando um médico é deletado. Este evento é emitido automaticamente pelo servidor após marcar um médico como deletado (soft delete) no banco de dados, propagando a notificação para todos os clientes conectados da mesma conta. O servidor faz broadcast do evento para todos os clientes da mesma accountId, permitindo que todos removam o médico da lista simultaneamente. Este evento não é iniciado pelo frontend; é um evento unidirecional (servidor → clientes) usado exclusivamente para sincronização de UI em tempo real. Quando um médico é deletado, todos os clientes da conta recebem apenas o ID do médico deletado e podem atualizar suas listas automaticamente.
Access Token
Para realizar requisições GET, POST, PUT, DELETE e PATCH nos endpoints da API você precisa de uma chave de autorização. Chamamos essa chave de accessToken.
Para ter acesso ao accessToken, é necessário que o usuário master da licença efetue a liberação deste pela interface do ImageMais Clinic. O accessToken tem validade de 1 hora.
Headers
| Nome | Tipo | Obrig. | Descrição |
|---|---|---|---|
Authorization | string | Sim | Token de autenticação no formato Bearer {accessToken}. O token deve ser enviado durante o handshake de conexão WebSocket. |
AuthorizationOBRIGATÓRIOParâmetros
Este método não possui parâmetros.
Fluxo passo a passo: doctors.deleted
Serviço marca médico como deletado e emite evento interno
Quando um médico é deletado via API, o doctor.service.ts marca o médico como deletado (soft delete) e emite evento interno:
// doctor.service.ts
// ... marca médico como deletado (soft delete) ...
// Emite evento interno após marcar como deletado
this.eventEmitter.emit('doctors.deleted', {
doctorId: id, // Apenas o ID do médico (não o objeto completo)
payload: payload,
});Listener propaga evento via WebSocket
O doctors.listener.ts escuta o evento interno e propaga via WebSocket para todos os clientes da conta:
// doctors.listener.ts
@OnEvent('doctors.deleted')
async handleDoctorsDeleted(data: {
doctorId: number;
payload: PayloadTokenDto;
}) {
try {
// Propaga via WebSocket para todos os clientes da conta
await this.gateway.notifyOnEvent(
'doctors.deleted',
data.doctorId, // Apenas o ID do médico
data.payload,
);
this.logger.debug(
`Medico ${data.doctorId} deletado e propagado via WebSocket para conta ${data.payload.accountId}`,
);
} catch (error) {
this.logger.error(
`Erro ao propagar evento doctors.deleted:`,
error,
);
}
}Gateway faz broadcast para todos da conta
O método `notifyOnEvent` envia o evento 'doctors.deleted' para todos os sockets da mesma accountId:
// accounts.gateways.ts
async notifyOnEvent(
event: string,
data: any,
payload: PayloadTokenDto,
): Promise<any> {
if (this._events.includes(event)) {
// Envia para todos os clientes da mesma conta
this.server
.to(`${this.room}${payload.accountId}`)
.emit(event, data);
}
}
// this.room = 'orders.account.'
// Evento: 'doctors.deleted' (está na lista de eventos permitidos - linha 103)
// Dados: apenas o ID do médico (number)
// Todos os clientes conectados da mesma accountId recebem o eventoCliente recebe evento e remove médico da lista
O componente ConfigListener.tsx escuta o evento e remove o médico da lista pelo ID:
// ConfigListener.tsx
socket.on('doctors.deleted', (doctorId: number) => {
// Remove médico da lista pelo ID
setDoctors((prev) =>
prev.filter((doctor) => doctor.id != String(doctorId))
);
});
// Cleanup ao desmontar
return () => {
socket.off('doctors.created');
socket.off('doctors.deleted');
socket.off('doctors.updated');
};Request URL
ws://api-dev.imagemais.com{
"message": "Este evento é emitido automaticamente pelo servidor (não requer request body)"
}{
"message": "Este evento é emitido automaticamente pelo servidor (não requer request body)"
}Respostas
123123