From bf588993c5bc35267322a8c8578c0a833eb7d238 Mon Sep 17 00:00:00 2001 From: Tiago Yamamoto Date: Wed, 4 Mar 2026 15:12:33 -0600 Subject: [PATCH] fix(frontend): use english api slugs and harden dashboard modules --- frontend/src/app/gestao-colaboradores/page.tsx | 8 ++++---- frontend/src/app/gestao-pedidos/page.tsx | 2 +- frontend/src/app/laboratorios/page.tsx | 3 ++- frontend/src/app/usuarios-pendentes/page.tsx | 11 +++++++---- .../src/components/CadastroProdutoWizard.tsx | 18 +++++++++--------- frontend/src/components/LaboratorioList.tsx | 9 ++++++--- frontend/src/services/entregasApiService.ts | 16 ++++++++-------- frontend/src/services/pedidoApiService.ts | 18 +++++++++--------- 8 files changed, 46 insertions(+), 39 deletions(-) diff --git a/frontend/src/app/gestao-colaboradores/page.tsx b/frontend/src/app/gestao-colaboradores/page.tsx index 450b16e..a575445 100644 --- a/frontend/src/app/gestao-colaboradores/page.tsx +++ b/frontend/src/app/gestao-colaboradores/page.tsx @@ -201,7 +201,7 @@ const GestaoColaboradores = () => { try { const response = await fetch( - `${process.env.NEXT_PUBLIC_BFF_API_URL}/usuarios?page=${page}&empresas_dados_id=${empresaId}`, + `${process.env.NEXT_PUBLIC_BFF_API_URL}/users?page=${page}&company_id=${empresaId}`, { headers: { 'accept': 'application/json', @@ -274,7 +274,7 @@ const GestaoColaboradores = () => { try { const response = await fetch( - `${process.env.NEXT_PUBLIC_BFF_API_URL}/usuarios/${id}`, + `${process.env.NEXT_PUBLIC_BFF_API_URL}/users/${id}`, { method: 'DELETE', headers: { @@ -298,7 +298,7 @@ const GestaoColaboradores = () => { const handleToggleStatus = async (colaborador: Colaborador) => { try { const response = await fetch( - `${process.env.NEXT_PUBLIC_BFF_API_URL}/usuarios/${colaborador.id}`, + `${process.env.NEXT_PUBLIC_BFF_API_URL}/users/${colaborador.id}`, { method: 'PATCH', headers: { @@ -872,4 +872,4 @@ const EnderecoModal = ({ endereco, onClose }: EnderecoModalProps) => { ); }; -export default GestaoColaboradores; \ No newline at end of file +export default GestaoColaboradores; diff --git a/frontend/src/app/gestao-pedidos/page.tsx b/frontend/src/app/gestao-pedidos/page.tsx index ff3424d..0c2672f 100644 --- a/frontend/src/app/gestao-pedidos/page.tsx +++ b/frontend/src/app/gestao-pedidos/page.tsx @@ -181,7 +181,7 @@ export default function GestaoPedidosPage() { // Construir URL com filtro baseado no nível do usuário - let url = `${process.env.NEXT_PUBLIC_BFF_API_URL}/pedidos?page=${currentPage}&limit=${pageSize}`; + let url = `${process.env.NEXT_PUBLIC_BFF_API_URL}/orders?page=${currentPage}&limit=${pageSize}`; // Se o usuário não for superadmin, filtrar pelos pedidos dele if (user && user.superadmin === false) { diff --git a/frontend/src/app/laboratorios/page.tsx b/frontend/src/app/laboratorios/page.tsx index 891d620..4ad0c62 100644 --- a/frontend/src/app/laboratorios/page.tsx +++ b/frontend/src/app/laboratorios/page.tsx @@ -269,6 +269,7 @@ const GestaoLaboratorios = () => { onPrevPage={handlePrevPage} onNextPage={handleNextPage} onSearch={handleSearch} + onRefresh={handleRefresh} /> )} @@ -286,4 +287,4 @@ const GestaoLaboratorios = () => { ); }; -export default GestaoLaboratorios; \ No newline at end of file +export default GestaoLaboratorios; diff --git a/frontend/src/app/usuarios-pendentes/page.tsx b/frontend/src/app/usuarios-pendentes/page.tsx index d693d6a..d9e2b30 100644 --- a/frontend/src/app/usuarios-pendentes/page.tsx +++ b/frontend/src/app/usuarios-pendentes/page.tsx @@ -90,7 +90,7 @@ const UsuariosPendentesPage = () => { } const response = await fetch( - `${process.env.NEXT_PUBLIC_BFF_API_URL}/usuarios?page=${pageNum}&ativo=false`, + `${process.env.NEXT_PUBLIC_BFF_API_URL}/users?page=${pageNum}`, { method: 'GET', headers: { @@ -106,7 +106,10 @@ const UsuariosPendentesPage = () => { const data = await response.json(); - const usuariosData = data.data || data.items || data; + const rawUsuariosData = data.data || data.items || data || []; + const usuariosData = Array.isArray(rawUsuariosData) + ? rawUsuariosData.filter((usuario: any) => usuario?.ativo === false) + : []; // Para cada usuário, buscar dados do endereço e empresa const usuariosCompletos = await Promise.all( @@ -179,7 +182,7 @@ const UsuariosPendentesPage = () => { const token = localStorage.getItem('access_token'); const response = await fetch( - `${process.env.NEXT_PUBLIC_BFF_API_URL}/usuarios/${usuarioId}`, + `${process.env.NEXT_PUBLIC_BFF_API_URL}/users/${usuarioId}`, { method: 'PATCH', headers: { @@ -646,4 +649,4 @@ const UsuariosPendentesPage = () => { ); }; -export default UsuariosPendentesPage; \ No newline at end of file +export default UsuariosPendentesPage; diff --git a/frontend/src/components/CadastroProdutoWizard.tsx b/frontend/src/components/CadastroProdutoWizard.tsx index ebe42df..2f6bdee 100644 --- a/frontend/src/components/CadastroProdutoWizard.tsx +++ b/frontend/src/components/CadastroProdutoWizard.tsx @@ -227,29 +227,29 @@ const CadastroProdutoWizard: React.FC = () => { - // Tentar diferentes estruturas possíveis - let laboratoriosArray = []; - let categoriasArray = []; + // Tentar diferentes estruturas possíveis (incluindo payload nulo) + let laboratoriosArray: any[] = []; + let categoriasArray: any[] = []; // Para laboratórios if (Array.isArray(labsData)) { laboratoriosArray = labsData; - } else if (labsData.documents && Array.isArray(labsData.documents)) { + } else if (labsData && Array.isArray((labsData as any).documents)) { laboratoriosArray = labsData.documents; - } else if (labsData.data && Array.isArray(labsData.data)) { + } else if (labsData && Array.isArray((labsData as any).data)) { laboratoriosArray = labsData.data; - } else if (labsData.items && Array.isArray(labsData.items)) { + } else if (labsData && Array.isArray((labsData as any).items)) { laboratoriosArray = labsData.items; } // Para categorias if (Array.isArray(catsData)) { categoriasArray = catsData; - } else if (catsData.documents && Array.isArray(catsData.documents)) { + } else if (catsData && Array.isArray((catsData as any).documents)) { categoriasArray = catsData.documents; - } else if (catsData.data && Array.isArray(catsData.data)) { + } else if (catsData && Array.isArray((catsData as any).data)) { categoriasArray = catsData.data; - } else if (catsData.items && Array.isArray(catsData.items)) { + } else if (catsData && Array.isArray((catsData as any).items)) { categoriasArray = catsData.items; } diff --git a/frontend/src/components/LaboratorioList.tsx b/frontend/src/components/LaboratorioList.tsx index fc80ec3..3bc3950 100644 --- a/frontend/src/components/LaboratorioList.tsx +++ b/frontend/src/components/LaboratorioList.tsx @@ -19,6 +19,7 @@ interface LaboratorioListProps { onPrevPage: () => void; onNextPage: () => void; onSearch: (nome: string) => void; + onRefresh: () => void; } const LaboratorioList: React.FC = ({ @@ -34,7 +35,8 @@ const LaboratorioList: React.FC = ({ onDelete, onPrevPage, onNextPage, - onSearch + onSearch, + onRefresh }) => { const totalPages = Math.ceil(totalLaboratorios / pageSize); const startItem = (currentPage - 1) * pageSize + 1; @@ -42,7 +44,8 @@ const LaboratorioList: React.FC = ({ const [search, setSearch] = React.useState(''); - const handleSearch = () => { + const handleSearch = (e: React.FormEvent) => { + e.preventDefault(); onSearch(search); }; @@ -204,4 +207,4 @@ const LaboratorioList: React.FC = ({ ); }; -export default LaboratorioList; \ No newline at end of file +export default LaboratorioList; diff --git a/frontend/src/services/entregasApiService.ts b/frontend/src/services/entregasApiService.ts index 0cfbd35..c67a036 100644 --- a/frontend/src/services/entregasApiService.ts +++ b/frontend/src/services/entregasApiService.ts @@ -1,6 +1,6 @@ /** * Serviço para gerenciar entregas via BFF - * Integração com https://bff-dev.saveinmed.com.br/api/v1/entregas + * Integração com https://bff-dev.saveinmed.com.br/api/v1/shipments */ const BFF_BASE_URL = process.env.NEXT_PUBLIC_BFF_API_URL!; @@ -112,7 +112,7 @@ export const entregasApiService = { if (params.search) queryParams.append('search', params.search); if (params.status && params.status !== 'todos') queryParams.append('status', params.status); - const url = `${BFF_BASE_URL}/entregas${queryParams.toString() ? `?${queryParams.toString()}` : ''}`; + const url = `${BFF_BASE_URL}/shipments${queryParams.toString() ? `?${queryParams.toString()}` : ''}`; const response = await fetch(url, { @@ -162,7 +162,7 @@ export const entregasApiService = { } - const response = await fetch(`${BFF_BASE_URL}/entregas/${entregaId}`, { + const response = await fetch(`${BFF_BASE_URL}/shipments/${entregaId}`, { method: 'GET', headers: { 'accept': 'application/json', @@ -209,7 +209,7 @@ export const entregasApiService = { if (!token) return; // Tentar OPTIONS para ver se retorna schema - const optionsResponse = await fetch(`${BFF_BASE_URL}/entregas`, { + const optionsResponse = await fetch(`${BFF_BASE_URL}/shipments`, { method: 'OPTIONS', headers: { 'Authorization': `Bearer ${token}`, @@ -243,7 +243,7 @@ export const entregasApiService = { }; - const response = await fetch(`${BFF_BASE_URL}/entregas`, { + const response = await fetch(`${BFF_BASE_URL}/shipments`, { method: 'POST', headers: { 'accept': 'application/json', @@ -308,7 +308,7 @@ export const entregasApiService = { } - const response = await fetch(`${BFF_BASE_URL}/entregas/${entregaId}`, { + const response = await fetch(`${BFF_BASE_URL}/shipments/${entregaId}`, { method: 'PATCH', headers: { 'accept': 'application/json', @@ -406,7 +406,7 @@ export const entregasApiService = { } const fazerRequisicao = async (dados: any) => { - return await fetch(`${BFF_BASE_URL}/entregas/cotacao`, { + return await fetch(`${BFF_BASE_URL}/shipping/calculate`, { method: 'POST', headers: { 'accept': 'application/json', @@ -527,4 +527,4 @@ export const entregasApiService = { return null; } } -}; \ No newline at end of file +}; diff --git a/frontend/src/services/pedidoApiService.ts b/frontend/src/services/pedidoApiService.ts index 875ee37..28f65c4 100644 --- a/frontend/src/services/pedidoApiService.ts +++ b/frontend/src/services/pedidoApiService.ts @@ -1,6 +1,6 @@ /** * Serviço para gerenciar pedidos via BFF - * Integração com https://bff-dev.saveinmed.com.br/api/v1/pedidos + * Integração com https://bff-dev.saveinmed.com.br/api/v1/orders */ const BFF_BASE_URL = process.env.NEXT_PUBLIC_BFF_API_URL!; @@ -248,7 +248,7 @@ export const pedidoApiService = { }; - const response = await fetch(`${BFF_BASE_URL}/pedidos`, { + const response = await fetch(`${BFF_BASE_URL}/orders`, { method: 'POST', headers: { 'accept': 'application/json', @@ -283,7 +283,7 @@ export const pedidoApiService = { } - const response = await fetch(`${BFF_BASE_URL}/pedidos/${pedidoId}`, { + const response = await fetch(`${BFF_BASE_URL}/orders/${pedidoId}`, { method: 'GET', headers: { 'accept': 'application/json', @@ -317,7 +317,7 @@ export const pedidoApiService = { // Primeiro, tentar buscar com filtro específico - let response = await fetch(`${BFF_BASE_URL}/pedidos?carrinhos=${carrinhoId}&status=pendente&limit=10`, { + let response = await fetch(`${BFF_BASE_URL}/orders?carrinhos=${carrinhoId}&status=pendente&limit=10`, { method: 'GET', headers: { 'accept': 'application/json', @@ -327,7 +327,7 @@ export const pedidoApiService = { // Se a busca específica não funcionar, fazer busca geral if (!response.ok) { - response = await fetch(`${BFF_BASE_URL}/pedidos?page=1&limit=100`, { + response = await fetch(`${BFF_BASE_URL}/orders?page=1&limit=100`, { method: 'GET', headers: { 'accept': 'application/json', @@ -399,7 +399,7 @@ export const pedidoApiService = { } - const response = await fetch(`${BFF_BASE_URL}/pedidos?page=${page}&limit=100&usuario_id=${userId}`, { + const response = await fetch(`${BFF_BASE_URL}/orders?page=${page}&limit=100&usuario_id=${userId}`, { method: 'GET', headers: { 'accept': 'application/json', @@ -432,7 +432,7 @@ export const pedidoApiService = { } - const response = await fetch(`${BFF_BASE_URL}/pedidos/${pedidoId}`, { + const response = await fetch(`${BFF_BASE_URL}/orders/${pedidoId}`, { method: 'PATCH', headers: { 'accept': 'application/json', @@ -471,7 +471,7 @@ export const pedidoApiService = { }; - const response = await fetch(`${BFF_BASE_URL}/pedidos/${pedidoId}`, { + const response = await fetch(`${BFF_BASE_URL}/orders/${pedidoId}`, { method: 'PATCH', headers: { 'accept': 'application/json', @@ -494,4 +494,4 @@ export const pedidoApiService = { return { success: false, error: 'Erro de conexão ao atualizar status' }; } }, -}; \ No newline at end of file +};