Repository navigation
feat(services): consultar pessoa atendida por ID e validators sem extensão (#167, backend) - #172
Merged
Merged
Conversation
Expõe GET /api/v1/clients/{id}, que devolve o mesmo ClientResponse de
POST e PUT: dados cadastrais, situação, responsáveis e pessoas de
referência com suas finalidades.
- Pessoa ativa ou inativa é devolvida; excluída, de outro tenant ou
inexistente respondem o mesmo 404 Client.NotFound. Id vazio é 400
Client.IdRequired, regra compartilhada com o validator do PUT.
- O CPF vem completo para qualquer usuário autenticado do tenant.
- A idade não vai no contrato: a resposta traz birthDate e o frontend
calcula.
- GetByIdAsync carrega responsáveis e pessoas de referência ordenados
por nome e, no desempate, por id.
- Tipos do frontend regenerados (services-api.d.ts).
- ADR 0060 e linha "Read by id" no §10 do ARCHITECTURE.
Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ensão (#167, backend) A regra de id vazio são três linhas. Virar método de ClientRuleBuilderExtensions trocava uma repetição curta por uma indireção e obrigava a alterar o UpdateClientCommandValidator, fora do escopo da issue. Os testes de cada validator já protegem o código Client.IdRequired contra divergência. - GetClientByIdQueryValidator escreve a regra inline, na forma que o validator do PUT já tinha. - ClientRuleBuilderExtensions e UpdateClientCommandValidator voltam ao estado da main. - Linha "Read by id" do §10 do ARCHITECTURE deixa de citar a extensão. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ras (ADR 0061) Apaga ClientRuleBuilderExtensions e escreve inline, em cada validator, as regras que Create e Update de clientes compartilhavam: limites de responsáveis e de pessoas de referência, "menor exige responsável", nome e vínculo do contato e finalidades. - Códigos e mensagens são os mesmos de antes; o fio não muda e os testes dos validators passam sem alteração. - Os literais Client.GuardianMissing e Client.ReferenceContactMissing passam a ser escritos no validator. - ADR 0061 substitui o item 3 do ADR 0049 (a extensão como casa de uma regra compartilhada). ARCHITECTURE §2, §4, §10 e §12, a skill agenza-backend-slice (use-case.md) e o índice de ADRs acompanham. Co-Authored-By: Claude Sonnet 5.5 <noreply@anthropic.com>
…ors-own-their-rules' into feat/backend-consultar-pessoa-por-id # Conflicts: # docs/adr/README.md
|
Warning Review limit reachedYou've used all free OSS reviews for now. Wait for the free limit to reset to keep reviewing this public repository. Next included review available in 57 minutes. View limit detailsLimit details: You’ve used the included review currently available. Review configuration: ⚙️ Run configuration
⛔ Files ignored due to path filters (1)
📒 Files selected for processing (17)
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. Comment |
This was referenced Oct 7, 2026
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.
Resumo
Parte backend de #167:
GET /api/v1/clients/{id}carrega uma pessoa atendida com seus contatos vinculados. Este PR reúne as duas linhas de trabalho que estavam em #170 (a consulta por id) e #171 (validators de clientes semClientRuleBuilderExtensions).A tela de detalhe e os estados de carregando, erro e não encontrado são do frontend e não estão aqui. Por isso a descrição usa
Refs, nãoCloses.1. Consulta por id (ADR 0060)
Usa o mesmo
ClientResponsequePOSTePUTjá devolvem, sem DTO novo.200: dados cadastrais,status(activeouinactive),guardiansereferenceContactscompurposes.404 Client.NotFound: id inexistente, de outro tenant ou de cadastro excluído, sempre com o mesmo corpo. Os filtros de tenant e de exclusão lógica já escondem a linha e o handler não faz checagem própria.400 Client.IdRequired: id vazio (00000000-...).Decisões registradas no ADR 0060:
birthDatee o frontend calcula.GetByIdAsync. Sem isso o banco devolve em ordem arbitrária, e oPUTrecria todos os contatos com ids novos.Efeito a conhecer:
POSTePUTrespondem os contatos na ordem em que a requisição os listou, e só a leitura ordena.GetByIdAsyncé compartilhado com o update, que passa a carregar os contatos já ordenados; ele os substitui todos, então não há efeito.Também entram:
Clients/GetClientById/(query, validator e handler) eClientsController.GetById.services-api.d.tsregenerado: o diff é só o blocogetde/clients/{id}.2. Validators sem extensão (ADR 0061)
ClientRuleBuilderExtensionsfoi apagada. Cada validator de clientes (Create e Update, e os aninhados de responsável e de pessoa de referência) escreve suas próprias regras, com os mesmos códigos e as mesmas mensagens de antes.agenza-backend-slice(references/use-case.md) e o índice de ADRs acompanham.Verificação
dotnet build backend/AdminBackend.slnx -c Release: 0 avisos, 0 erros.dotnet test backend/AdminBackend.slnx -c Release: 738 testes verdes (ServicesService.Tests399,ServicesService.PersistenceTests56,Admin.SharedKernel.Tests228,Admin.Logging.Tests36,IdentityService.Tests19), com o gate de cobertura passando.npx tsc --noEmitnoadmin-frontendcom os tipos novos: sem erros.postgres:18inicializado porinfra/postgres/init, com identity e services em portas privadas (5180/5181/5433), sem tocar na stack Aspire e no volumeagenza-postgres-data. 32 verificações com token real (PKCE) passaram:200para ativa, inativa e sem nascimento nem contatos; CPF inteiro; sem campoage.PUTque os substitui; os antigos continuam só comDeletedAtna tabela e não aparecem.404 Client.NotFoundpara id desconhecido, de outro tenant (a linha existe na tabela) e excluído, com corpos idênticos fora docorrelationId.400 Client.IdRequiredsobclientIdpara id vazio,401sem token e403 Tenant.ContextMismatchcomX-Tenant-Iddiferente do token.Fora deste PR
admin-frontend, com idade calculada a partir debirthDatee as mensagens de carregando, erro e não encontrado.Refs #167
🤖 Generated with Claude Code