# Etapa 02 — Modelagem das entidades JPA ## Objetivo Implementar as migrations Flyway completas do schema e as entidades JPA correspondentes, conforme definido em `ARQUITETURA-SCHEMA.md` seção 4. ## Contexto Esta etapa traduz o schema SQL já definido na arquitetura para migrations Flyway numeradas e entidades Java. Não altere o schema aqui — se algo precisar mudar, volte primeiro em `ARQUITETURA-SCHEMA.md`, versione (v1.1) e só então implemente. ## Tarefas 1. Criar as migrations Flyway, uma tabela por arquivo, na ordem de dependência (por causa das foreign keys): - `V2__create_usuarios.sql` - `V3__create_ramos.sql` - `V4__create_proxies.sql` - `V5__create_buscas.sql` - `V6__create_leads.sql` - `V7__create_telefones.sql` - `V8__create_historico_contato.sql` 2. Usar exatamente o DDL definido em `ARQUITETURA-SCHEMA.md` seção 4 (colunas, tipos, constraints, índices) — não improvisar campos novos sem atualizar o documento antes 3. Criar as entidades JPA em `domain/`, uma classe por tabela: `Usuario`, `Ramo`, `Proxy`, `Busca`, `Lead`, `Telefone`, `HistoricoContato` - Usar `@Enumerated(EnumType.STRING)` para os campos de status (mais seguro que String livre) — criar enums correspondentes: `StatusBusca`, `StatusLead`, `StatusProxy` - Mapear os relacionamentos (`@ManyToOne`, `@OneToMany`) conforme as foreign keys do schema 4. Criar as interfaces `repository/` (Spring Data JPA) para cada entidade: `LeadRepository`, `BuscaRepository`, `RamoRepository`, `ProxyRepository`, etc. - Adicionar métodos de consulta que já sabemos que serão necessários: `findByHashDedup`, `findByCnpj`, `findByStatus`, `findByBuscaId` 5. Rodar a aplicação e validar que todas as migrations aplicam em sequência sem erro em um banco limpo ## Critérios de aceite - [ ] Todas as migrations da lista aplicam em sequência em um banco limpo - [ ] Entidades JPA mapeiam corretamente para as tabelas (validar com um teste simples de save/find por entidade) - [ ] Enums de status criados e usados nas entidades correspondentes - [ ] Repositories criados com os métodos de consulta essenciais - [ ] Nenhuma divergência entre o schema SQL aplicado e o definido em `ARQUITETURA-SCHEMA.md`