From c8b4d97e58d020abf1546c1e4c7ad8730e567f78 Mon Sep 17 00:00:00 2001 From: Rodrigo Martins Date: Sat, 12 Apr 2025 22:47:03 -0300 Subject: [PATCH] fix atendimentos.ts Signed-off-by: Rodrigo Martins --- src/server/routes/atendimentos.ts | 110 ++++++++++++++++-------------- 1 file changed, 58 insertions(+), 52 deletions(-) diff --git a/src/server/routes/atendimentos.ts b/src/server/routes/atendimentos.ts index f81d0bd..e8f8b33 100644 --- a/src/server/routes/atendimentos.ts +++ b/src/server/routes/atendimentos.ts @@ -12,78 +12,84 @@ const upload = multer({ storage: multer.memoryStorage() }); router.use(authMiddleware); +// Middleware para logging +router.use((req, res, next) => { + console.log(`[${new Date().toISOString()}] ${req.method} ${req.originalUrl}`); + console.log('Query Params:', req.query); + console.log('Body:', req.body); + + // Capturar a resposta + const oldJson = res.json; + res.json = function(data) { + console.log(`[${new Date().toISOString()}] Response:`, { + statusCode: res.statusCode, + data: data + }); + return oldJson.apply(res, arguments); + }; + + next(); +}); + // Função auxiliar para validar se uma string é um UUID válido -function isValidUUID(uuid: string): boolean { +function isValidUUID(uuid: string, isRoute: boolean = false): boolean { + // Se for uma rota e estiver na lista de exceções, retorna true + const routeExceptions = ['agendamentos']; + if (isRoute && routeExceptions.includes(uuid)) { + return true; + } + if (!uuid) return false; - try { - // Validação principal com regex para UUID padrão - const regexUUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; - - // Se passar na validação principal, retorna verdadeiro - if (regexUUID.test(uuid)) return true; - - // Caso contrário, verifica se é um ID válido de alguma outra forma - // (como um ID numérico ou string que possa ser convertida em UUID) - console.log(`ID recebido em formato não-UUID padrão: ${uuid}`); - - // Se for "agendamentos", é uma rota especial que não precisa de validação UUID - if (uuid === "agendamentos") return true; - - // Se chegou aqui e não é um UUID válido, retorna falso - return false; - } catch (error) { - console.error("Erro ao validar UUID:", error); - return false; - } + const regexUUID = /^[0-9a-f]{8}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{4}-[0-9a-f]{12}$/i; + return regexUUID.test(uuid); } // Rota para listar agendamentos router.get("/agendamentos", async (req: Request, res: Response) => { try { const { data } = req.query; - console.log("Requisição de agendamentos recebida, data:", data); + console.log("[Agendamentos] Iniciando busca - Data requisitada:", data); let dateFilter = {}; if (data) { try { - // Aceitar e validar o formato da data de forma mais flexível - const parsedDate = new Date(data as string); + const parsedDate = parseISO(data as string); - // Verificar se a data é válida if (isNaN(parsedDate.getTime())) { - console.error("Data inválida recebida:", data); - // Em vez de retornar erro, continue sem filtro - console.log("Continuando sem filtro de data devido a data inválida"); - } else { - console.log("Data parseada:", parsedDate); - - const weekStart = startOfWeek(parsedDate, { locale: ptBR }); - const weekEnd = endOfWeek(parsedDate, { locale: ptBR }); - - console.log("Período de busca:", { - weekStart: weekStart.toISOString(), - weekEnd: weekEnd.toISOString() + console.error("[Agendamentos] Data inválida:", data); + return res.status(400).json({ + error: "Data inválida", + details: "O formato da data deve ser YYYY-MM-DD" }); - - dateFilter = { - data: { - gte: weekStart, - lte: weekEnd, - }, - }; } + + const weekStart = startOfWeek(parsedDate, { locale: ptBR }); + const weekEnd = endOfWeek(parsedDate, { locale: ptBR }); + + console.log("[Agendamentos] Período de busca:", { + weekStart: weekStart.toISOString(), + weekEnd: weekEnd.toISOString() + }); + + dateFilter = { + data: { + gte: weekStart, + lte: weekEnd, + }, + }; } catch (parseError) { - console.error("Erro ao analisar data:", parseError); - // Continuar sem filtro de data em caso de erro, em vez de falhar - console.log("Continuando sem filtro de data devido ao erro"); + console.error("[Agendamentos] Erro ao analisar data:", parseError); + return res.status(400).json({ + error: "Erro ao processar data", + details: "Verifique se a data está no formato YYYY-MM-DD" + }); } } - console.log("Filtro de data:", JSON.stringify(dateFilter)); + console.log("[Agendamentos] Filtro de data:", JSON.stringify(dateFilter)); - // Usando o modelo correto e com tratamento de erro adequado try { const agendamentos = await prisma.agendamentoAtendimento.findMany({ where: dateFilter, @@ -106,18 +112,18 @@ router.get("/agendamentos", async (req: Request, res: Response) => { }, }); - console.log(`Encontrados ${agendamentos.length} agendamentos`); + console.log(`[Agendamentos] Encontrados ${agendamentos.length} agendamentos`); return res.json(agendamentos); } catch (dbError) { - console.error("Erro na consulta do banco de dados:", dbError); + console.error("[Agendamentos] Erro na consulta do banco de dados:", dbError); return res.status(500).json({ error: "Erro ao buscar agendamentos no banco de dados", details: dbError.message }); } } catch (error) { - console.error("Erro geral ao listar agendamentos:", error); + console.error("[Agendamentos] Erro geral ao listar agendamentos:", error); return res.status(500).json({ error: "Erro ao listar agendamentos", details: error.message