WEBSOCKETremove.progress

Remover 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

AuthorizationOBRIGATÓRIO
Tipo:string
Token de autenticação no formato Bearer {accessToken}. O token deve ser enviado durante o handshake de conexão WebSocket.

Parâmetros

orderOBRIGATÓRIO
Tipo:object
Objeto Order completo do pedido a ser removido da lista de progresso

Fluxo passo a passo: remove.progress

1

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]);
Quem emite: frontend (Validation.tsx)
Quando: quando recebe evento 'completed' para o mesmo pedido
Condição: só emite se order.id === completed.id
Payload: objeto Order completo (não apenas ID)
Contexto: normalmente após criar etiquetas com sucesso (pedido é completado automaticamente)
2

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>;
}
Quem recebe: servidor (Gateway WS)
Dados recebidos: objeto Order completo (OrdersWithStatus)
Processamento: handler simples - apenas repassa para broadcast
Resposta: não retorna resposta (operação unidirecional)
Broadcast: notifica todos os clientes da mesma conta
3

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'
Evento emitido: 'remove.progress' (está na lista de eventos permitidos)
Dados enviados: objeto Order completo
Quem recebe: todos os clientes conectados da mesma accountId
Diferença importante: broadcast para todos (incluindo quem enviou)
4

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');
  };
}, []);
Quem recebe: todos os clientes conectados da mesma conta
O que faz: remove pedido da lista de 'Em Progresso' localmente
Sincronização: todos os clientes veem a remoção simultaneamente
Atualização de UI: lista é atualizada automaticamente em todos os clientes
Cleanup: remove listeners ao desmontar para prevenir memory leaks

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)"
}