Skip to content

feat: CRUD de clientes e registro de compras (issues #8, #9, #12)

Marília Costa requested to merge develop into main

O que foi feito até agora com base nas issues #8, #9 e #12

#8 - API: Endpoint de Criação de Clientes

  • Criei arquivo create-client.dto.ts com validações (@IsNotEmpty, @IsEmail, @MaxLength);
  • Endpoint POST /api/clients implementado;
  • Validação de unicidade de e-mail no Service, retornando 409 Conflict;
  • Validações de campos retornando 400 Bad Request com mensagens claras.

#9 - API: Endpoints de Listagem, Busca e Exclusão de Clientes

  • Endpoint GET /api/clients com paginação (page, size) e busca por nome;
  • Resposta estruturada com data e meta (totalElements, totalPages);
  • Endpoint DELETE /api/clients/:id retornando 204 No Content;
  • Tratamento de integridade referencial: bloqueia exclusão de cliente com compras vinculadas (400 Bad Request).

#12 - API: Endpoint POST para Registro de Nova Compra

  • Criei módulo purchase com controller, service e dto;
  • Endpoint POST /api/purchases implementado;
  • Validação de existência do cliente antes de registrar a compra (404 Not Found);
  • Validações de valor positivo, data ISO8601 e produto obrigatório.

OBS: Criei Global Exception Filter (all-exceptions.filter.ts) padronizando todas as respostas de erro da API no formato { statusCode, error, message }

Problemas que encontrei durante os testes

Descobri que o Prisma 7 (com o adapter @prisma/adapter-pg) não lança mais um erro com code: 'P2003' em violações de chave estrangeira. O erro real chega como um erro genérico do driver, com o código do PostgreSQL (23001) dentro de error.cause.code. Considerando esse contexto, implementei um type guard (isForeignKeyViolation) no clients.service.ts para detectar corretamente essa violação com tipagem segura, evitando tanto o uso de any (rejeitado pelo lint) quanto um falso-negativo que retornava 500 em vez de 400 ao tentar excluir um cliente com compras vinculadas. Até agora funcionou.

Testes realizados

Todos os endpoints foram testados manualmente pelo Postman, incluindo:

  • Criação de cliente com sucesso (201)
  • Criação com e-mail duplicado (409)
  • Criação com dados inválidos (400)
  • Listagem com busca por nome (200)
  • Exclusão de cliente sem compras (204)
  • Exclusão de cliente com compras vinculadas (400) para validar a correção do bug de FK
  • Exclusão de cliente inexistente (404)
  • Registro de compra com sucesso (201)
  • Registro de compra com cliente inexistente (404)

Merge request reports

Loading