Skip to content

[TREINAMENTO] CRUD de Vacinas - José Arthur - #885

Open
JoseArthurAlmeida wants to merge 5 commits into
training/patient-vaccine-crudfrom
feature/873-vacinas-crud-jose-arthur
Open

[TREINAMENTO] CRUD de Vacinas - José Arthur#885
JoseArthurAlmeida wants to merge 5 commits into
training/patient-vaccine-crudfrom
feature/873-vacinas-crud-jose-arthur

Conversation

@JoseArthurAlmeida

@JoseArthurAlmeida JoseArthurAlmeida commented Aug 18, 2026

Copy link
Copy Markdown
Collaborator

O que mudou?

Este PR implementa o CRUD completo de vacinas, tanto no backend (API) quanto no frontend (APAE). Antes da mudança, as vacinas só podiam ser listadas e consultadas; agora é possível criar, editar e excluir registros de vacinas, com validações e tratamento de conflitos.

Issue Relacionadas

Closes #873

Mudanças Realizadas

  • API — Criação, edição e exclusão de vacinas: novos endpoints POST /vaccines, PUT /vaccines/{id} e DELETE /vaccines/{id} com DTOs de entrada validados (CreateVaccineDTO, UpdateVaccineDTO), lógica de negócio no VaccineApplicationServiceImpl, mapeamento e métodos no repositório (existsByNameIgnoreCaseAndIdNot).
  • API — Exceções e tratamento de erros: novas exceções VaccineConflictException (nome duplicado) e VaccineInUseException (vacina vinculada a pacientes), tratadas no PatientExceptionHandler com status 409 Conflict e 404 Not Found para vacina inexistente.
  • Frontend — Páginas de criação e edição: novas rotas /vaccines/new e /vaccines/[id]/edit, com formulários e hooks (use-vaccine-create, use-vaccine-edit), schemas Zod de validação e campos com capitalização automática.
  • Frontend — Ações na listagem: botão "Adicionar" na listagem de vacinas, e ações de editar/excluir em cada item da lista, com modal de confirmação para exclusão e bloqueio (com tooltip) para vacinas associadas a pacientes.
  • Frontend — Integração com a API: funções fetchVaccineApi, createVaccineApi, updateVaccineApi e deleteVaccineApi, além das rotas proxy do Next.js (POST /api/vaccines e /api/vaccines/[id]).

Evidências

As evidências estão registradas e documentadas na issue .

@coderabbitai

coderabbitai Bot commented Aug 18, 2026

Copy link
Copy Markdown
Contributor

Important

Review skipped

Auto reviews are disabled on base/target branches other than the default branch.

Please check the settings in the CodeRabbit UI or the .coderabbit.yaml file in this repository. To trigger a single review, invoke the @coderabbitai review command.

⚙️ Run configuration

Configuration used: defaults

Review profile: CHILL

Plan: Pro Plus

Run ID: fac81bde-2ecb-496c-97c6-710e3f75be6d

You can disable this status message by setting the reviews.review_status to false in the CodeRabbit configuration file.

Use the checkbox below for a quick retry:

  • 🔍 Trigger review

Thanks for using CodeRabbit! It's free for OSS, and your support helps us grow. If you like it, consider giving us a shout-out.

❤️ Share

Comment @coderabbitai help to get the list of available commands.

@Dario-Arthur Dario-Arthur left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Testei o PR localmente:

npx tsc --noEmit e npm run build passando sem erros
Listagem, busca por nome, criação, edição e exclusão de vacina funcionando na interface
Testado em mobile também (criação via FAB)

Encontrei um bug na validação de nome duplicado: ao tentar criar uma vacina com nome já existente (ex: "Teste"), o sistema exibe toast de sucesso e o POST /api/vaccines retorna 200, mas a vacina não é de fato criada (o contador de vacinas não aumenta). O esperado, conforme a issue #869, é que a API retorne 409 Conflict e a interface exiba um erro claro não um falso sucesso.

Isso é um problema de integridade: o usuário recebe feedback de que a ação funcionou quando na verdade não aconteceu nada. Vale revisar a lógica de validação de duplicidade no backend (VaccineApplicationServiceImpl / existsByNameIgnoreCaseAndIdNot).

@JoseArthurAlmeida

Copy link
Copy Markdown
Collaborator Author

@Dario-Arthur Ajustei esse problema. Seguem as alterações feitas:

  • Proxy (Next.js): Removida a conversão de status 409 para 200 em route.ts; agora o erro do backend é propagado diretamente.
  • Frontend (vaccines.api.ts): Ajustados o createVaccineApi e updateVaccineApi para extrair a mensagem de erro e exibir o toast correto ("Já existe uma vacina com o nome: X").
  • Backend: Padronizada a criação para usar existsByNameIgnoreCase, mantendo a validação case-insensitive alinhada com a edição e disparando o 409 Conflict.

@Dario-Arthur

Copy link
Copy Markdown
Contributor

@JoseArthurAlmeida Beleza, testei aqui e confirmo que resolveu, tentei criar com nome duplicado e agora bloqueia certinho, com o toast de erro aparecendo. Build também segue ok (tsc --noEmit e build sem erros).

Ainda vou validar mais alguns pontos antes de fechar de vez a review, mas esse aqui já está certo. Valeu pelo ajuste rápido!

@MeloWillian
MeloWillian requested review from MeloWillian and removed request for Dario-Arthur and jefter-dev August 22, 2026 12:05

@MeloWillian MeloWillian left a comment

Copy link
Copy Markdown
Contributor

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Evidências devem sempre ficar registradas na issue. Na descrição do PR, você pode, por exemplo, adicionar uma observação informando que todas as evidências foram disponibilizadas na issue.

@MeloWillian
MeloWillian requested review from Dario-Arthur and MeloWillian and removed request for Dario-Arthur August 22, 2026 12:14
@MeloWillian MeloWillian added this to the 2026.2 - Sprint 1 milestone Aug 22, 2026
@JoseArthurAlmeida

Copy link
Copy Markdown
Collaborator Author

@MeloWillian Atualizei a issue com a evidência e já adicionei a observação na descrição do PR.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

3 participants