# Etapa 01 — Setup do projeto, Docker e Flyway ## Objetivo Criar o esqueleto do projeto backend em Spring Boot, configurar a conexão com PostgreSQL via Docker e deixar o Flyway pronto para rodar as migrations que virão nas próximas etapas. ## Contexto Este é o ponto de partida do projeto. Nenhum código de negócio é escrito aqui — o foco é ambiente funcional: projeto sobe, conecta no banco, Flyway aplica a primeira migration vazia com sucesso. Consulte `ARQUITETURA-SCHEMA.md` (seção 1 e 2) para a stack e estrutura de pacotes a seguir. ## Tarefas 1. Criar projeto Spring Boot 3.x (via Spring Initializr ou manualmente) com as dependências: - `spring-boot-starter-web` - `spring-boot-starter-data-jpa` - `spring-boot-starter-validation` - `spring-boot-starter-security` - `flyway-core` - `postgresql` (driver) - `lombok` 2. Criar a estrutura de pacotes conforme definido em `ARQUITETURA-SCHEMA.md` seção 2 (`config`, `domain`, `repository`, `scraper`, `normalizer`, `proxy`, `service`, `controller`, `security`, `worker`) — pode começar com pacotes vazios, serão populados nas próximas etapas 3. Criar `docker-compose.yml` inicial (apenas serviço `postgres`, os demais serviços virão na etapa 09): ```yaml services: postgres: image: postgres:16 environment: POSTGRES_DB: leadscraper POSTGRES_USER: leadscraper POSTGRES_PASSWORD: ports: - "5433:5432" volumes: - postgres_data:/var/lib/postgresql/data volumes: postgres_data: ``` 4. Configurar `application.yml` com datasource apontando para o Postgres do Docker, e Flyway habilitado 5. Criar `src/main/resources/db/migration/V1__init.sql` vazio (ou só com um comentário) para validar que o Flyway roda corretamente na subida da aplicação 6. Criar arquivo `.env.example` com as variáveis necessárias (senha do banco, etc.) — nunca commitar `.env` real 7. Subir o Postgres via `docker compose up -d postgres` e validar que o Spring Boot conecta e aplica a migration inicial sem erro ## Critérios de aceite - [ ] Projeto Spring Boot compila e sobe sem erros - [ ] `docker compose up -d postgres` sobe o banco corretamente - [ ] Aplicação conecta no Postgres e o Flyway registra a migration `V1__init` na tabela `flyway_schema_history` - [ ] Estrutura de pacotes criada conforme arquitetura - [ ] `.env.example` documentado