From 60e98dd47c38d3b9e59441732408f742f3a82e97 Mon Sep 17 00:00:00 2001 From: esdrasrenan Date: Sun, 7 Dec 2025 02:54:56 -0300 Subject: [PATCH] Retorna status da maquina mesmo sem sessao de chat ativa MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit A query getTicketSession agora sempre retorna machineOnline, permitindo que o botao de chat seja habilitado corretamente quando a maquina esta online mas nao ha sessao ativa. 🤖 Generated with [Claude Code](https://claude.com/claude-code) Co-Authored-By: Claude Opus 4.5 --- convex/liveChat.ts | 23 +++++++++++++------ .../tickets/ticket-summary-header.tsx | 8 +++---- 2 files changed, 20 insertions(+), 11 deletions(-) diff --git a/convex/liveChat.ts b/convex/liveChat.ts index ae4910f..14fae77 100644 --- a/convex/liveChat.ts +++ b/convex/liveChat.ts @@ -500,7 +500,7 @@ export const checkMachineUpdates = query({ // QUERIES (Agente) // ============================================ -// Listar sessao ativa de um ticket +// Listar sessao ativa de um ticket e status da maquina export const getTicketSession = query({ args: { ticketId: v.id("tickets"), @@ -517,21 +517,30 @@ export const getTicketSession = query({ return null } + // Verificar se maquina esta online (sempre, mesmo sem sessao) + const machine = ticket.machineId ? await ctx.db.get(ticket.machineId) : null + const fiveMinutesAgo = Date.now() - 5 * 60 * 1000 + const machineOnline = machine?.lastHeartbeatAt && machine.lastHeartbeatAt > fiveMinutesAgo + const session = await ctx.db .query("liveChatSessions") .withIndex("by_ticket", (q) => q.eq("ticketId", ticketId)) .filter((q) => q.eq(q.field("status"), "ACTIVE")) .first() + // Sempre retorna status da maquina, mesmo sem sessao ativa if (!session) { - return null + return { + sessionId: null, + agentId: null, + agentName: null, + startedAt: null, + lastActivityAt: null, + unreadByAgent: 0, + machineOnline: Boolean(machineOnline), + } } - // Verificar se maquina esta online - const machine = ticket.machineId ? await ctx.db.get(ticket.machineId) : null - const fiveMinutesAgo = Date.now() - 5 * 60 * 1000 - const machineOnline = machine?.lastHeartbeatAt && machine.lastHeartbeatAt > fiveMinutesAgo - return { sessionId: session._id, agentId: session.agentId, diff --git a/src/components/tickets/ticket-summary-header.tsx b/src/components/tickets/ticket-summary-header.tsx index f723b8a..7b136b6 100644 --- a/src/components/tickets/ticket-summary-header.tsx +++ b/src/components/tickets/ticket-summary-header.tsx @@ -322,11 +322,11 @@ export function TicketSummaryHeader({ ticket }: TicketHeaderProps) { ? { ticketId: ticket.id as Id<"tickets">, viewerId: convexUserId as Id<"users"> } : "skip" ) as { - sessionId: Id<"liveChatSessions"> - agentId: Id<"users"> + sessionId: Id<"liveChatSessions"> | null + agentId: Id<"users"> | null agentName: string | null - startedAt: number - lastActivityAt: number + startedAt: number | null + lastActivityAt: number | null unreadByAgent: number machineOnline: boolean } | null | undefined