refactor: Evolui o schema do banco e alinha o código da aplicação
Este Merge Request (MR) implementa uma refatoração significativa no schema do banco de dados para aumentar a flexibilidade, consistência e integridade dos dados. Todo o backend foi alinhado a esta nova modelagem, com foco especial na simplificação do modelo de produtos e na padronização dos status de safra.
Evolução do Schema (Prisma) Remoção da Entidade Variety: A tabela varieties foi removida. O conceito de "variedade" foi unificado na tabela products para simplificar a lógica e o cadastro.
Produtos Globais e Customizados: A tabela products agora contém um campo producerId que pode ser nulo. Se producerId for NULL, o produto é considerado global e disponível para todos. Se producerId estiver preenchido, é um produto customizado daquele produtor.
Status de Safra (HarvestStatus): O campo status da tabela harvests, que era uma String, foi transformado em um Enum (IN_PROGRESS, COMPLETED, CANCELLED) para garantir a integridade dos dados, conforme alinhado com a Luiza.
Reset de Migrações: O histórico de migrações foi resetado para um único arquivo init limpo, refletindo o estado final e consolidado do banco de dados.
Alinhamento do Backend (NestJS) Módulo products: A lógica de criação foi ajustada para suportar produtos globais e customizados. A regra de negócio agora impede a duplicação de nome apenas no escopo correto (global ou por produtor).
Implementada a rota GET /products/producer/:producerId, que retorna uma lista com os produtos globais mais os produtos específicos do produtor, ordenados alfabeticamente. A resposta contém apenas id e name.
Módulos harvests e plantings: Todo o código foi refatorado para remover qualquer menção ou dependência da antiga entidade Variety.
Módulo varieties: O módulo varieties e todos os seus arquivos (controller, service, repository, DTOs) foram completamente removidos do projeto.
Por Que Foi Feito? Simplificação: Unificar product e variety em um único conceito simplifica o cadastro e a lógica de negócio para o usuário final.
Flexibilidade: Permitir que produtores criem seus próprios produtos, mantendo um catálogo global, oferece autonomia sem perder a padronização.
Integridade dos Dados: O uso de Enum para HarvestStatus previne a inserção de dados inválidos ou inconsistentes, um problema comum com campos de texto livre.
Manutenibilidade: A padronização do schema e a limpeza do histórico de migrações tornam a base de código mais fácil de entender e manter.
Modelagem do banco de dados usada como base
https://dbdiagram.io/d/Ai-Produtor-68e011eed2b621e4222ffb79