remove.progressRemover Pedido de Progresso
Evento WebSocket para remover um pedido da lista de "Em Progresso" quando ele é finalizado. O cliente emite este evento com o objeto Order completo após receber o evento 'completed' indicando que o pedido foi finalizado. O servidor faz broadcast do evento para todos os clientes conectados da mesma conta, permitindo que todos removam o pedido da lista de progresso simultaneamente. Este evento é sempre precedido pelo evento 'completed' e só é emitido quando o pedido correspondente é completado. É um evento unidirecional (não retorna resposta) usado exclusivamente para sincronizar a remoção do pedido em todos os clientes da mesma conta. Normalmente é chamado após criar etiquetas com sucesso, quando o pedido é completado 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
| Nome | Tipo | Obrig. | Descrição |
|---|---|---|---|
order | object | Sim | Objeto Order completo do pedido a ser removido da lista de progresso |
orderOBRIGATÓRIOFluxo passo a passo: remove.progress
Cliente escuta evento 'completed' e emite remove.progress
O frontend escuta o evento 'completed' e, se for o mesmo pedido, emite 'remove.progress' com o objeto Order completo:
// Validation.tsx
useEffect(() => {
if (socket) {
// Escuta quando um pedido é completado
socket.on('completed', (completed: Order) => {
// Valida se é o mesmo pedido
if (order.id === completed.id) {
// Remove da lista de progresso
socket?.emit('remove.progress', order);
}
});
}
}, [socket, order.id]);Servidor recebe e faz broadcast para todos os clientes
No backend (NestJS + Gateway), o servidor recebe o evento e faz broadcast para todos os clientes da mesma conta:
// accounts.gateways.ts
@SubscribeMessage('remove.progress')
async handleRemoveProgress(
@ConnectedSocket() client: Socket,
@MessageBody() order: OrdersWithStatus,
) {
// Faz broadcast para todos os clientes da mesma conta
await this.notifyOnEvent('remove.progress', order, client.data.payload);
}
interface OrdersWithStatus extends Orders {
status: Partial<OrdersStatus>;
}Servidor propaga evento para todos da conta
O método `notifyOnEvent` envia o evento 'remove.progress' para todos os sockets da mesma accountId:
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.'
// Todos os clientes conectados da mesma accountId recebem o evento 'remove.progress'Todos os clientes recebem e removem da lista
Todos os clientes conectados da mesma conta recebem o evento 'remove.progress' e removem o pedido da lista de progresso:
// ListInProgress.tsx
socket.on('remove.progress', (remove: Order) => {
// Remove o pedido da lista local de "Coletando"
setOrders((prev) =>
prev.filter((order) => order.id !== remove.id)
);
});
// Remove listeners ao desmontar componente
useEffect(() => {
return () => {
socket.off('progress');
socket.off('remove.progress');
};
}, []);Request URL
ws://api-dev.imagemais.com{
"id": 123,
"date": "2025-01-23T10:30:00.000Z",
...{
"id": 123,
"date": "2025-01-23T10:30:00.000Z",
"startTime": "09:00",
"endTime": "09:15",
"status": {
"id": 3,
"name": "COMPLETED"
},
"patient": {
"id": 456,
"name": "João Silva"
},
"doctor": {
"id": 789,
"name": "Dr. Victor"
}
}Respostas
{
"message": "Pedido removido da lista de progresso (evento unidirecional, sem resposta)"
}{
"message": "Pedido removido da lista de progresso (evento unidirecional, sem resposta)"
}