Feat/expedicao - #408
Closed
virocha11 wants to merge 8 commits into
Closed
Feat/expedicao#408virocha11 wants to merge 8 commits into
virocha11 wants to merge 8 commits into
Conversation
…mulario-expedicao
feat: tela de criação de expedições
…iz-criar-página-de-listagem-de-expedições
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment
Add this suggestion to a batch that can be applied as a single commit.This suggestion is invalid because no changes were made to the code.Suggestions cannot be applied while the pull request is closed.Suggestions cannot be applied while viewing a subset of changes.Only one suggestion per line can be applied in a batch.Add this suggestion to a batch that can be applied as a single commit.Applying suggestions on deleted lines is not supported.You must change the existing code in this line in order to create a valid suggestion.Outdated suggestions cannot be applied.This suggestion has been applied or marked resolved.Suggestions cannot be applied from pending reviews.Suggestions cannot be applied on multi-line comments.Suggestions cannot be applied while the pull request is queued to merge.Suggestion cannot be applied right now. Please check back later.
Expedições: listagem, cadastro e integração com a API v2
Entrega o módulo de expedições no painel — tela de listagem e formulário de cadastro — integrado ao contrato da rota
/api/v2/expedicoes(hcf-api, branch532-cadastro-expedicoes).São 8 commits, 22 arquivos, +1308/−3, reunindo o trabalho de
feat/Expedicao,formulario-expedicao(PR #404) e399-team-luiz-criar-página-de-listagem-de-expedições.Listagem de expedições
Tela em
/expedicoes, dividida em "Próximas expedições" e "Expedições realizadas", com paginação independente por seção e estados de carregamento, vazio e erro com botão de repetir. Cada card mostra período, destino, número de participantes e descrição.Filtros por data de início, data de fim, cidade de destino e participante — os dois últimos como selects que exibem nome e submetem id.
Cadastro de expedição
Página em
/expedicoes/novo, organizada emsrc/features/expedicoes/com separação entre contrato de API, componentes de formulário e hooks:api/expedicaoContract.ts— tipos e a conversão do formulário para o payload da APIcomponents/— campos de destino, participantes e rotahooks/useBuscaRemota.ts— busca remota com debounce de 300 ms, descarte de respostas fora de ordem e fixação das opções já selecionadas, para que não sumam quando o termo de busca mudahooks/useNovaExpedicaoPage.ts— orquestra o POST e revalida a listagem após o cadastroParticipantes e cidades são buscados sob demanda em
/usuariose/cidades, em vez de carregar as listas inteiras.Integração com o contrato v2
Ajustes feitos após validação contra a API real:
orderno formato"coluna:direção", substituindoorder_column/order_direction. Os parâmetros antigos eram aceitos sem erro e ignorados, fazendo as duas seções caírem no defaultid:desc— a ordenação por data não estava funcionando. A API responde 400 a formato inválido.cidade_nomeeestado_sigla, lidos direto da resposta e exibidos comoPiraquara/PR. Elimina a necessidade de indexar em memória as ~5.800 cidades só para resolver o nome.Permissões
Novo recurso
Expedicaoemsrc/resources/permissions.ts, comread,create,updateedeleteconcedidos ao Curador. Operador e Identificador não recebem regras. A rota de cadastro é protegida porauth.can('create', 'Expedicao'); listagem e detalhes exigem apenas usuário autenticado.Internacionalização
Namespace
novaExpedicaoPageregistrado emsrc/i18n.ts, com traduções para pt-BR, en e es.Correções incluídas
Hook de pre-push (
a53d437, de @LuizGustavoNascimeto): o git mantém o stdin do hook aberto com a lista de refs, e os processos filhos do vitest herdavam esse pipe, travando a fila de testes. Oexec < /dev/nulldesfaz a herança. Sem isso,git pushficava pendurado indefinidamente.Interceptor do axios (
src/setup.ts): a verificação de 401 acessavaerr.error.codesem proteção, lançandoTypeErrorem qualquer erro sem corpo de resposta — rede, timeout, 502. Agora é opcional e também considerastatus === 401.Testes
test/pages/ListaExpedicoesScreen.spec.ts— montagem dos parâmetros por seção, transformação da resposta e fallback paraCidade #idtest/features/expedicoes/expedicaoContract.spec.ts— endpoint, preservação do offset de data, omissão de campos vazios, normalização de descrição e extração de mensagem de erro da APIPontos de atenção
532-cadastro-expedicoesdahcf-api. Contra adevelopmentatual da API, o parâmetroordere os camposcidade_nome/estado_siglanão existem, e a listagem não funciona como descrito.GET /usuariosexige perfil Curador. Para Operador e Identificador a rota responde 403 e o select de participantes fica vazio, com alerta na tela.data_inicio >= hojeedata_fim <= ontem), então uma expedição em andamento não aparece em nenhuma das seções.Justificativa do merge
A entrega fecha o fluxo básico de expedições — listar, filtrar e cadastrar — que hoje não existe no painel. É funcionalidade nova e isolada: entra por rota própria, menu próprio e recurso de permissão próprio, sem alterar comportamento de telas existentes.
As duas mudanças que tocam código compartilhado são corretivas e de baixo risco. O ajuste no interceptor do axios remove um
TypeErrorque já afetava qualquer erro sem corpo de resposta, em todo o painel. A correção do hook de pre-push desbloqueia o push para todo o time, e não faz sentido segurá-la em um branch.A cobertura de testes acompanha as duas partes de maior risco — a tradução do formulário para o payload e a montagem dos parâmetros de listagem —, que são justamente onde divergências de contrato costumam passar despercebidas. As limitações restantes estão do lado da API e não bloqueiam o uso do que está entregue.