get.notificationsBuscar Notificações
Evento WebSocket para buscar notificações de requisições de orçamento pendentes em tempo real. O cliente emite este evento para solicitar as notificações. O servidor retorna uma resposta imediata (confirmação) e, em seguida, busca as notificações no banco de dados e envia os dados reais via evento separado 'notifications'. Diferente de eventos de broadcast, este evento envia os dados apenas para o cliente que solicitou (usando client.id), garantindo que cada cliente receba apenas suas próprias notificações.
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: get.notifications
Cliente emite a requisição via WebSocket
O frontend emite o evento 'get.notifications' para solicitar as notificações pendentes:
socket.emit(
'get.notifications',
(response: {
status: string;
timestamp: string;
message?: string;
}) => {
// Trata resposta imediata (confirmação)
if (response.status !== 'receive') {
setErrorBudgetRequests(
response.message ?? 'Erro ao buscar notificações'
);
}
setLoadingBudgetRequests(false);
}
);Servidor recebe e retorna confirmação imediata
No backend (NestJS + Gateway), o servidor captura o evento e retorna uma resposta imediata:
@SubscribeMessage('get.notifications')
async handleGetNotifications(
@ConnectedSocket() client: Socket
) {
try {
const payload = client.data.payload as PayloadTokenDto;
// Emite evento interno para buscar notificações
this.eventEmitter.emit('notifications', {
to: client.id,
payload: payload,
});
// Retorna resposta imediata (vai para o callback)
return {
status: 'receive',
timestamp: new Date().toISOString(),
};
} catch (error) {
return {
status: 'refused',
message: 'Erro ao buscar notificações',
timestamp: new Date().toISOString(),
};
}
}Listener busca notificações no banco de dados
O listener escuta o evento interno e busca as notificações pendentes:
@OnEvent('notifications')
async handleOnBudgetsRequestsNotifications(event: {
to: string;
payload: PayloadTokenDto;
}) {
try {
// Busca notificações pendentes no banco
const response = await this.budgetsRequestsService.findAllQueue(
event.payload,
{ status: BudgetsRequestsStatus.PENDING }
);
// Envia para o cliente específico
this.gateway.notifyOnEventClient(event.to, 'notifications', {
type: 'budgets_request',
...response,
});
} catch (e) {
this.logger.debug('Erro ao buscar notificações', e);
}
}Servidor envia dados para cliente específico
O método `notifyOnEventClient` envia os dados apenas para o cliente que solicitou:
async notifyOnEventClient(to: string, event: string, data: any) {
if (this._events.includes(event)) {
// Envia apenas para o socket específico
this.server.to(to).emit(event, data);
}
}Cliente recebe e atualiza a UI
No frontend, componentes escutam o evento 'notifications' e atualizam o estado:
// Notification.tsx
socket.on('notifications', (notificationBudgetsRequest) => {
setNotifications(notificationBudgetsRequest.data);
});
// BudgetList.tsx
socket.on('notifications', (notificationBudgetsRequest) => {
setBudgetRequests(notificationBudgetsRequest.data);
});Request URL
ws://api-dev.imagemais.com{}{}Respostas
{
"status": "receive",
"timestamp": "2025-01-23T10:30:00.000Z"
...{
"status": "receive",
"timestamp": "2025-01-23T10:30:00.000Z"
}{
"status": "refused",
"message": "Erro ao buscar notificações",
...{
"status": "refused",
"message": "Erro ao buscar notificações",
"timestamp": "2025-01-23T10:30:00.000Z"
}