get.orders.progressBuscar Pedidos em Progresso
Evento WebSocket para buscar pedidos em status "IN_PROGRESS" em tempo real. O cliente emite este evento quando o componente é montado para solicitar a lista de pedidos em progresso. O servidor retorna uma resposta imediata ({ status: 'receive' }) e processa a requisição via EventEmitter interno, enviando cada pedido individualmente através do evento 'progress'. Diferente de outros eventos que enviam arrays completos, este evento envia cada pedido em uma mensagem separada via 'progress', permitindo que o frontend adicione os pedidos incrementalmente à lista. Os pedidos são adicionados no início da lista (pedidos mais recentes aparecem primeiro). O frontend também escuta o evento 'remove.progress' para remover pedidos quando eles saem do status IN_PROGRESS.
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.progress
Cliente emite a requisição via WebSocket
O frontend emite o evento 'get.orders.progress' quando o componente é montado:
// ListInProgress.tsx
useEffect(() => {
if (socket) {
socket.emit('get.orders.progress');
}
}, [socket]);Servidor recebe, retorna resposta imediata e emite evento interno
No backend (NestJS + Gateway), o servidor captura o evento, retorna resposta imediata e emite um evento interno:
@SubscribeMessage('get.orders.progress')
async handleOrdersProgress(
@ConnectedSocket() client: Socket
) {
// Cria LoadOrdersEvent com client.id e payload
this.eventEmitter.emit(
'load.orders.progress',
new LoadOrdersEvent(client.id, client.data.payload),
);
// Retorna resposta imediata (diferente de get.orders.standby)
return {
status: 'receive',
};
}
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 IN_PROGRESS no banco e envia cada um via 'progress':
@OnEvent('load.orders.progress')
async handleOnLoadOrdersProgress({ to, payload }: LoadOrdersEvent) {
try {
// Busca pedidos com status IN_PROGRESS
const orders = await this.loadOrdersByStatus(
OrdersStatusEnum.IN_PROGRESS,
payload,
);
// Envia cada pedido individualmente
orders.map((order) =>
this.gateway.notifyOnEventClient(to, 'progress', order),
);
} catch (e) {
this.logger.debug(
`Fail execunting event Orders in status: ${OrdersStatusEnum.IN_PROGRESS}`,
e as Error,
);
}
}Servidor envia cada pedido via evento 'progress'
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('progress', order1);
// this.server.to(client.id).emit('progress', order2);
// this.server.to(client.id).emit('progress', order3);
// ...Cliente recebe e adiciona pedidos no início da lista
No frontend, o componente escuta o evento 'progress' e adiciona cada pedido no início da lista:
// ListInProgress.tsx
socket.on('progress', (newData: Order) => {
setOrders((prev) => {
// Previne duplicatas
if (prev.find((d) => d.id === newData.id)) return prev;
// Adiciona novo pedido no INÍCIO da lista (pedidos mais recentes primeiro)
return [newData, ...prev];
});
});
// Também escuta remove.progress para remover pedidos
socket.on('remove.progress', (remove: Order) => {
setOrders((prev) =>
prev.filter((order) => order.id !== remove.id)
);
});
// Remove listeners ao desmontar
useEffect(() => {
return () => {
socket.off('progress');
socket.off('remove.progress');
};
}, []);Request URL
ws://api-dev.imagemais.com{}{}Respostas
{
"status": "receive"
}{
"status": "receive"
}{
"message": "Erro ao buscar pedidos em progresso",
"error": "Bad Request",
...{
"message": "Erro ao buscar pedidos em progresso",
"error": "Bad Request",
"statusCode": 400
}