get.orders.standbyBuscar Pedidos em Standby
Evento WebSocket para buscar pedidos em status "STANDBY" em tempo real. O cliente emite este evento quando o componente é montado para solicitar a lista de pedidos em standby. O servidor processa a requisição via EventEmitter interno e envia cada pedido individualmente através do evento 'collect'. Diferente de outros eventos que enviam arrays completos, este evento envia cada pedido em uma mensagem separada via 'collect', permitindo que o frontend adicione os pedidos incrementalmente à lista. O frontend também escuta o evento 'remove.standby' para remover pedidos quando eles saem do status standby.
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.orders.standby
Cliente emite a requisição via WebSocket
O frontend emite o evento 'get.orders.standby' quando o componente é montado:
// ListStandby.tsx
useEffect(() => {
if (socket) {
socket.emit('get.orders.standby');
}
}, [socket]);Servidor recebe e emite evento interno
No backend (NestJS + Gateway), o servidor captura o evento e emite um evento interno:
@SubscribeMessage('get.orders.standby')
async handleOrdersStandby(
@ConnectedSocket() client: Socket
) {
// Cria LoadOrdersEvent com client.id e payload
this.eventEmitter.emit(
'load.orders.standby',
new LoadOrdersEvent(client.id, client.data.payload),
);
}
class LoadOrdersEvent {
to: string; // ID do socket do cliente
payload: PayloadTokenDto; // Dados de autenticação
data?: SearchDto; // (Opcional) Para este caso não é usado
}Listener busca pedidos e envia individualmente
O listener escuta o evento interno, busca os pedidos STANDBY no banco e envia cada um via 'collect':
@OnEvent('load.orders.standby')
async handleOnLoadOrdersStandby({ to, payload }: LoadOrdersEvent) {
try {
// Busca pedidos com status STANDBY
const orders = await this.loadOrdersByStatus(
OrdersStatusEnum.STANDBY,
payload,
);
// Envia cada pedido individualmente
orders.map((order) =>
this.gateway.notifyOnEventClient(to, 'collect', order),
);
} catch (e) {
this.logger.debug(
`Fail execunting event Orders in status: ${OrdersStatusEnum.STANDBY}`,
e as Error,
);
}
}Servidor envia cada pedido via evento 'collect'
O método `notifyOnEventClient` envia cada pedido individualmente para o cliente:
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);
}
}
// Para cada pedido encontrado:
// this.server.to(client.id).emit('collect', order1);
// this.server.to(client.id).emit('collect', order2);
// this.server.to(client.id).emit('collect', order3);
// ...Cliente recebe e adiciona pedidos à lista
No frontend, o componente escuta o evento 'collect' e adiciona cada pedido à lista:
// ListStandby.tsx
socket.on('collect', (newData: Order) => {
setOrders((prev) => {
// Previne duplicatas
if (prev.find((d) => d.id === newData.id)) return prev;
// Adiciona novo pedido à lista
return [...prev, newData];
});
});
// Também escuta remove.standby para remover pedidos
socket.on('remove.standby', (remove: Order) => {
setOrders((prev) =>
prev.filter((order) => order.id !== remove.id)
);
});
// Remove listeners ao desmontar
useEffect(() => {
return () => {
socket.off('collect');
socket.off('remove.standby');
};
}, []);Request URL
ws://api-dev.imagemais.com{}{}Respostas
{
"message": "Pedidos em standby serão enviados via evento 'collect'"
}{
"message": "Pedidos em standby serão enviados via evento 'collect'"
}{
"message": "Erro ao buscar pedidos em standby",
"error": "Bad Request",
...{
"message": "Erro ao buscar pedidos em standby",
"error": "Bad Request",
"statusCode": 400
}