diff --git a/seeder-api/README.md b/seeder-api/README.md index f60108c..7d1f134 100644 --- a/seeder-api/README.md +++ b/seeder-api/README.md @@ -12,16 +12,34 @@ Microserviço para popular o banco de dados com dados realistas de teste. | Entidade | Quantidade | Descrição | |----------|------------|-----------| | **SuperAdmin** | 1 | Usuário administrador do sistema | -| **Empresas** | 10 | Empresas reais (Toyota, Honda, etc.) | -| **Admins/Recruiters** | 8 | Usuários de empresas | +| **Empresas** | 31 | 30 empresas tech + 🏭 ACME Corp | +| **Admins/Recruiters** | 8+ | Usuários de empresas | | **Candidatos** | 30 | Job seekers de várias nacionalidades | -| **Vagas** | 50 | Vagas realistas com requisitos | +| **Vagas** | 1059 | 990 vagas normais + 69 vagas ACME (humor tech) | | **Candidaturas** | 20 | Aplicações de exemplo | | **Prefeituras** | 47 | Todas as prefeituras japonesas | | **Cidades** | ~50 | Cidades de Aichi e Tokyo | --- +## 🏭 ACME Corporation + +> "Se não explodir, não é ACME!" ™ + +A ACME Corp é nossa empresa especial com **69 vagas de tecnologia com humor**, inspirada nos clássicos Looney Tunes. + +### Destaques das Vagas ACME: +- 🚀 Engenheiro de Software de Foguetes Portáteis +- 💣 Dev de TNT Inteligente +- 🕳️ Arquiteto de Túneis Instantâneos +- 📊 Data Scientist de Previsão de Falhas (Accuracy: 100%) +- 🦅 ML Engineer de Detecção de Papa-Léguas (Precision: 0%) +- 💥 Chief Explosion Officer (CEO) +- 🎨 UX Designer de Dinamite +- E mais 62 vagas hilárias... + +--- + ## 🚀 Uso ### Instalação @@ -67,12 +85,19 @@ DB_NAME=gohorsejobs - **Senha**: `Takeshi@2025` ### Recrutador -- **Login**: `maria_santos` +- **Login**: `maria_santos` (DesignHub) - **Senha**: `User@2025` +### 🐺 Wile E. Coyote (ACME Corp) +- **Login**: `wile_e_coyote` +- **Senha**: `MeepMeep@123` +- **Empresa**: ACME Corporation +- **Cargo**: HR Manager & Chief Failure Officer + ### Candidatos (todos usam mesma senha) - **Login**: `paulo_santos` - **Login**: `maria@email.com` +- **Login**: `ana_silva`, `carlos_santos`, `maria_oliveira`, `pedro_costa`, `juliana_ferreira` - **Senha**: `User@2025` --- @@ -87,6 +112,7 @@ src/ ├── users.js # Seed de usuários ├── companies.js # Seed de empresas ├── jobs.js # Seed de vagas + ├── acme.js # 🏭 ACME Corp + 69 vagas com humor ├── cities.js # Seed de cidades └── applications.js # Seed de candidaturas ``` @@ -98,3 +124,5 @@ src/ - Execute as **migrations** antes do seed - Use apenas em ambiente de **desenvolvimento** - Senhas padrão são **apenas para testes** +- **ACME não se responsabiliza** por lesões causadas por produtos falhos 🐺 + diff --git a/seeder-api/src/index.js b/seeder-api/src/index.js index 971cfa1..962cf75 100644 --- a/seeder-api/src/index.js +++ b/seeder-api/src/index.js @@ -5,6 +5,7 @@ import { seedUsers } from './seeders/users.js'; import { seedCompanies } from './seeders/companies.js'; import { seedJobs } from './seeders/jobs.js'; import { seedApplications } from './seeders/applications.js'; +import { seedAcmeCorp, seedWileECoyote } from './seeders/acme.js'; async function resetDatabase() { console.log('🗑️ Resetting database...'); @@ -58,6 +59,8 @@ async function seedDatabase() { await seedCompanies(); await seedUsers(); await seedJobs(); + await seedAcmeCorp(); // 🏭 ACME Corp + 69 vagas hilariantes + await seedWileECoyote(); // 🐺 Wile E. Coyote user await seedApplications(); console.log('\n✅ Database seeding completed successfully!'); @@ -65,8 +68,10 @@ async function seedDatabase() { console.log(' - Regions seeded'); console.log(' - Cities seeded'); console.log(' - 1 SuperAdmin'); - console.log(' - 30 Companies'); - console.log(' - 990 Jobs (33 per company)'); + console.log(' - 31 Companies (30 + ACME Corp)'); + console.log(' - 1059 Jobs (990 + 69 ACME)'); + console.log(' - 🏭 ACME Corp: 69 vagas com humor tech'); + console.log(' - 🐺 Wile E. Coyote: wile_e_coyote / MeepMeep@123'); console.log(' - Work modes: onsite, hybrid, remote'); console.log(' - 20 Applications'); diff --git a/seeder-api/src/seeders/acme.js b/seeder-api/src/seeders/acme.js new file mode 100644 index 0000000..41f7d61 --- /dev/null +++ b/seeder-api/src/seeders/acme.js @@ -0,0 +1,274 @@ +import { pool } from '../db.js'; +import crypto from 'crypto'; + +/** + * 🎯 ACME Corporation - Fornecedora Oficial do Coiote desde 1949 + * + * "Se não explodir, não é ACME!" ™ + * + * Sede: Deserto de Mojave, Monument Valley, ou onde quer que o Papa-Léguas esteja. + * Endereço: Acme Corporation, Estrada do Deserto s/n, USA (entrega instantânea por catapulta) + */ + +// 69 vagas com humor tech para a ACME Corp +const acmeJobTemplates = [ + // === Desenvolvimento & Engenharia (jobs 1-20) === + { title: 'Engenheiro de Software de Foguetes Portáteis', skills: ['C++', 'Propulsão', 'Não Explodir'], salaryRange: [15000, 25000], desc: 'Desenvolver sistema de ignição que funcione ANTES de o usuário olhar para baixo.' }, + { title: 'Desenvolvedor Full Stack de Armadilhas', skills: ['React', 'Node.js', 'Física Cartoon'], salaryRange: [12000, 20000], desc: 'Criar UIs intuitivas para armadilhas que nunca funcionam conforme planejado.' }, + { title: 'Arquiteto de Sistemas de Catapultas', skills: ['AWS', 'Kubernetes', 'Balística'], salaryRange: [18000, 30000], desc: 'Projetar infraestrutura escalável para lançamento de coiotes a longas distâncias.' }, + { title: 'Dev Backend de Buracos Portáteis', skills: ['Python', 'Geometria Não-Euclidiana', 'ACME SDK'], salaryRange: [14000, 22000], desc: 'Implementar API REST para buracos que funcionam em qualquer superfície, exceto quando você precisa.' }, + { title: 'Frontend Engineer de Pedidos por Catálogo', skills: ['Vue.js', 'UX', 'Entrega Instantânea'], salaryRange: [10000, 16000], desc: 'Redesenhar o catálogo ACME para checkout em menos de 3 segundos.' }, + { title: 'Engenheiro de QA de Produtos Explosivos', skills: ['Selenium', 'Sobrevivência', 'Primeiros Socorros'], salaryRange: [8000, 40000], desc: 'Testar produtos ACME. Seguro de vida incluso. Alta rotatividade.' }, + { title: 'DevOps de Entregas Instantâneas', skills: ['Docker', 'Teletransporte', 'CI/CD'], salaryRange: [14000, 22000], desc: 'Garantir que produtos cheguem em 0.3 segundos, mesmo no meio do deserto.' }, + { title: 'Desenvolvedor de TNT Inteligente', skills: ['IoT', 'Sensores', 'Detonação Remota'], salaryRange: [16000, 26000], desc: 'Programar TNT com IA que sabe quando NÃO explodir (feature request do Coiote).' }, + { title: 'Engenheiro de Gravidade Seletiva', skills: ['Física Quântica', 'Cartoon Logic', 'Go'], salaryRange: [20000, 35000], desc: 'Desenvolver algoritmo que faz a gravidade funcionar apenas quando conveniente.' }, + { title: 'Programador de Placas de Penhascos', skills: ['React Native', 'GPS', 'Sinalização'], salaryRange: [9000, 14000], desc: 'Criar app que avisa "olhe para baixo" no momento certo.' }, + { title: 'SRE de Catapultas Gigantes', skills: ['Prometheus', 'Grafana', 'Elasticidade'], salaryRange: [15000, 24000], desc: 'Monitorar uptime de 99.9% em equipamentos que falham 100% das vezes.' }, + { title: 'Desenvolvedor de Patins-Foguete', skills: ['Rust', 'Propulsão', 'Freios?'], salaryRange: [13000, 21000], desc: 'Implementar sistema de frenagem. Urgente. Muito urgente.' }, + { title: 'Arquiteto de Túneis Instantâneos', skills: ['Three.js', '3D Modeling', 'Ilusão de Ótica'], salaryRange: [16000, 25000], desc: 'Projetar túneis que parecem reais mas só funcionam para Papa-Léguas.' }, + { title: 'Engenheiro de Machine Learning Anti-Bird', skills: ['TensorFlow', 'Computer Vision', 'Bip-Bip Detection'], salaryRange: [18000, 28000], desc: 'Treinar modelo para identificar Papa-Léguas. Dataset: 0 capturas bem-sucedidas.' }, + { title: 'Developer de Imãs Gigantes', skills: ['Eletromagnetismo', 'Física', 'Debugging'], salaryRange: [14000, 22000], desc: 'Corrigir bug onde imã atrai tudo EXCETO o alvo pretendido.' }, + { title: 'Programador de Guarda-Chuvas Anti-Bigorna', skills: ['C#', 'Resistência de Materiais', 'Otimismo'], salaryRange: [11000, 18000], desc: 'Desenvolver guarda-chuva que suporte 2 toneladas. Prazo: ontem.' }, + { title: 'Engenheiro de Som do Bip-Bip', skills: ['Audio Processing', 'FFT', 'Frustração'], salaryRange: [10000, 16000], desc: 'Analisar frequência do "Bip-Bip" para prever localização. Spoiler: não funciona.' }, + { title: 'Dev de Molas Gigantes', skills: ['Spring Boot', 'Elastic Stack', 'Física Clássica'], salaryRange: [12000, 19000], desc: 'Calcular trajetória de molas que sempre lançam na direção errada.' }, + { title: 'Arquiteto de Analytics de Falhas', skills: ['Apache Spark', 'Data Lake', 'Análise Post-Mortem'], salaryRange: [17000, 27000], desc: 'Construir dashboard de falhas. Sempre 100% no vermelho.' }, + { title: 'Desenvolvedor de Tintas Invisíveis', skills: ['WebGL', 'Shaders', 'Invisibilidade'], salaryRange: [13000, 20000], desc: 'Criar tinta que esconde buracos. Funciona apenas em demos.' }, + + // === Produto & Design (jobs 21-35) === + { title: 'Product Manager de Armadilhas', skills: ['Roadmap', 'Falhas', 'Pivoting'], salaryRange: [14000, 23000], desc: 'Priorizar features de armadilhas. Backlog: 3.847 itens, 0 entregas bem-sucedidas.' }, + { title: 'UX Designer de Dinamite', skills: ['Figma', 'User Research', 'Explosões'], salaryRange: [11000, 18000], desc: 'Redesenhar pavio de dinamite para melhor usabilidade durante perseguições.' }, + { title: 'UI Designer de Catálogos ACME', skills: ['Photoshop', 'Tipografia', 'Anos 50'], salaryRange: [9000, 15000], desc: 'Manter estética vintage do catálogo. Nada de dark mode.' }, + { title: 'Product Designer de Buracos Pintados', skills: ['Illustrator', 'Realismo', 'Ilusão'], salaryRange: [12000, 19000], desc: 'Projetar buracos 2D que pareçam 3D. Para todos, menos o Coiote.' }, + { title: 'Scrum Master de Projetos Explosivos', skills: ['Agile', 'Sprints (literais)', 'Retrospectivas'], salaryRange: [10000, 17000], desc: 'Facilitar sprints de 2 semanas que duram 3 segundos (e terminam em explosão).' }, + { title: 'Design Lead de Disfarces de Pedra', skills: ['3D Modeling', 'Texturização', 'Camuflagem'], salaryRange: [15000, 24000], desc: 'Liderar time de designers de disfarces que nunca enganam ninguém.' }, + { title: 'UX Researcher de Clientes Coiote', skills: ['Pesquisa Qualitativa', 'Empatia', 'Trauma'], salaryRange: [11000, 18000], desc: 'Entrevistar único cliente. Ele não consegue responder (está em queda livre).' }, + { title: 'Motion Designer de Explosões', skills: ['After Effects', 'Partículas', 'Timing Cômico'], salaryRange: [10000, 16000], desc: 'Animar explosões com timing perfeito. Estrelas girando na cabeça incluídas.' }, + { title: 'Information Architect de Manuais', skills: ['Documentação', 'Hierarquia', 'Avisos Ignorados'], salaryRange: [9000, 14000], desc: 'Organizar manuais que ninguém lê. "AVISO: NÃO OLHE PARA BAIXO" na página 347.' }, + { title: 'Brand Designer Anti-Papa-Léguas', skills: ['Branding', 'Identidade Visual', 'Vingança'], salaryRange: [12000, 20000], desc: 'Criar mascote corporativo que não seja humilhado por um pássaro.' }, + { title: 'Service Designer de Suporte ao Coiote', skills: ['Jornada do Cliente', 'Touchpoints', 'Dor'], salaryRange: [13000, 21000], desc: 'Mapear jornada do cliente. Spoiler: sempre termina no fundo de um canyon.' }, + { title: 'Design System Lead ACME', skills: ['Design Tokens', 'Componentes', 'Consistência'], salaryRange: [16000, 25000], desc: 'Criar sistema de design. Cores primárias: vermelho explosivo, preto chamuscado.' }, + { title: 'Accessibility Designer de Produtos', skills: ['WCAG', 'Inclusão', 'Bom Senso'], salaryRange: [11000, 18000], desc: 'Tornar produtos acessíveis. Adicionar aviso sonoro antes de explosões.' }, + { title: 'Product Owner de Foguetes', skills: ['Backlog', 'Priorização', 'Otimismo Irracional'], salaryRange: [14000, 22000], desc: 'Defender features de foguetes em reuniões. Taxa de sucesso: negativa.' }, + { title: 'Design QA de Bigornas', skills: ['Testes Visuais', 'Pixel Perfect', 'Peso'], salaryRange: [9000, 15000], desc: 'Verificar se bigornas estão pixeladas corretamente antes de cair.' }, + + // === Data & Analytics (jobs 36-45) === + { title: 'Data Scientist de Previsão de Falhas', skills: ['Python', 'Statistics', 'Pessimismo'], salaryRange: [16000, 26000], desc: 'Prever falhas de produtos. Accuracy: 100% (sempre falham).' }, + { title: 'Data Engineer de Pipeline de Explosões', skills: ['Airflow', 'Spark', 'ETL'], salaryRange: [14000, 23000], desc: 'Construir pipelines de dados de explosões. Volume: infinito.' }, + { title: 'Business Intelligence de Vendas', skills: ['Tableau', 'SQL', 'Negação'], salaryRange: [12000, 19000], desc: 'Criar dashboards mostrando vendas para único cliente há 75 anos.' }, + { title: 'ML Engineer de Detecção de Papa-Léguas', skills: ['PyTorch', 'YOLO', 'Frustração'], salaryRange: [17000, 27000], desc: 'Treinar detector. Precision: 0%. Recall: "ele já era".' }, + { title: 'Analytics Engineer de Métricas ACME', skills: ['DBT', 'Snowflake', 'Definição de Sucesso'], salaryRange: [15000, 24000], desc: 'Definir KPIs. Meta: reduzir falhas de 100% para 99.9%.' }, + { title: 'Data Analyst de Comportamento do Pássaro', skills: ['GA4', 'Mixpanel', 'Observação'], salaryRange: [11000, 18000], desc: 'Analisar padrões do Papa-Léguas. Conclusão: "ele corre muito rápido".' }, + { title: 'Quantitative Analyst de Apostas', skills: ['R', 'Monte Carlo', 'Vegas'], salaryRange: [18000, 28000], desc: 'Calcular probabilidade de captura. Resultado: 0.0000001%.' }, + { title: 'AI Research Scientist de Planos', skills: ['GPT', 'Reinforcement Learning', 'Arrependimento'], salaryRange: [20000, 32000], desc: 'Usar IA para criar planos melhores. IA: "desista".' }, + { title: 'Data Governance de Falhas', skills: ['Data Catalog', 'Lineage', 'Classificação'], salaryRange: [13000, 21000], desc: 'Catalogar 50 anos de falhas. Precisa de mais storage.' }, + { title: 'Growth Hacker ACME', skills: ['Experimentos', 'AB Testing', 'Milagres'], salaryRange: [14000, 22000], desc: 'Aumentar base de clientes. Cliente atual: 1. Meta: 2.' }, + + // === Infraestrutura & Ops (jobs 46-55) === + { title: 'Platform Engineer de Entrega Instantânea', skills: ['Terraform', 'Cloud', 'Teleporte'], salaryRange: [16000, 25000], desc: 'Manter infra de entrega em 0.3s. SLA: 99.9% de entregas, 100% de falhas.' }, + { title: 'Network Engineer de Comunicação Coiote', skills: ['TCP/IP', 'Sinalização', 'Fumaça'], salaryRange: [12000, 19000], desc: 'Manter rede de comunicação no deserto. Latência: problema do cliente.' }, + { title: 'Security Engineer de Patentes', skills: ['SOC2', 'Segredos Industriais', 'Espionagem'], salaryRange: [15000, 24000], desc: 'Proteger patentes de produtos que não funcionam de serem copiados.' }, + { title: 'Cloud Architect de Fábricas', skills: ['Multi-Cloud', 'Híbrido', 'Caos'], salaryRange: [19000, 30000], desc: 'Migrar fábricas para nuvem. Explosões agora são serverless.' }, + { title: 'SysAdmin de Servidores de Catálogo', skills: ['Linux', 'Uptime', 'Vintage'], salaryRange: [10000, 16000], desc: 'Manter servidor PDP-11 de 1972 que roda o catálogo.' }, + { title: 'Reliability Engineer de Teletransporte', skills: ['Chaos Engineering', 'Resiliência', 'Fé'], salaryRange: [17000, 26000], desc: 'Garantir confiabilidade de sistema que funciona quando quer.' }, + { title: 'Database Admin de Pedidos', skills: ['PostgreSQL', 'Backup', 'História'], salaryRange: [11000, 18000], desc: 'Gerenciar 75 anos de pedidos de um único cliente muito leal.' }, + { title: 'IT Support de Produtos ACME', skills: ['Troubleshooting', 'Paciência', 'Filosofia'], salaryRange: [7000, 12000], desc: 'Atender chamados: "meu foguete não para". Spoiler: não tem freio.' }, + { title: 'Incident Manager de Explosões', skills: ['Incident Response', 'Post-Mortem', 'Calma'], salaryRange: [14000, 22000], desc: 'Gerenciar incidentes. São tantos que viraram feature.' }, + { title: 'Cost Optimization de Bigornas', skills: ['FinOps', 'Bulk Buying', 'Logística'], salaryRange: [13000, 20000], desc: 'Otimizar custos de bigornas. Volume: 47 por dia.' }, + + // === Liderança & Gestão (jobs 56-65) === + { title: 'VP de Engenharia de Produtos Impossíveis', skills: ['Leadership', 'Estratégia', 'Resiliência'], salaryRange: [25000, 45000], desc: 'Liderar time de engenharia. Turnover: 100% (por razões físicas).' }, + { title: 'CTO de Inovação Explosiva', skills: ['Visão', 'Roadmap', 'Seguro de Vida'], salaryRange: [30000, 50000], desc: 'Definir futuro tecnológico da ACME. Previsão: mais explosões.' }, + { title: 'Director de R&D de Armadilhas', skills: ['Research', 'Development', 'Denial'], salaryRange: [22000, 38000], desc: 'Dirigir pesquisa de armadilhas que funcionem. Funding: ilimitado. Resultados: zero.' }, + { title: 'Engineering Manager de Foguetes', skills: ['People Management', '1-1s', 'Insurance'], salaryRange: [18000, 30000], desc: 'Gerenciar time de engenheiros de foguetes. Foco em retenção (literal).' }, + { title: 'Head de QA e Sobreviventes', skills: ['Test Strategy', 'Hiring', 'Eulogy Writing'], salaryRange: [20000, 32000], desc: 'Liderar QA. Principal desafio: encontrar testadores voluntários.' }, + { title: 'Director de Customer Success', skills: ['Retention', 'Upsell', 'Therapy'], salaryRange: [21000, 35000], desc: 'Garantir sucesso do cliente. Cliente atual precisa de terapia, não de sucesso.' }, + { title: 'VP de Produto Anti-Ave', skills: ['Product Strategy', 'Market Research', 'Obsessão'], salaryRange: [26000, 42000], desc: 'Definir estratégia de produto. Foco único: capturar Papa-Léguas.' }, + { title: 'Chief Explosion Officer (CEO)', skills: ['Vision', 'Inspiration', 'Fire Extinguisher'], salaryRange: [40000, 80000], desc: 'Liderar empresa. Escritório fica a 2km de distância de segurança.' }, + { title: 'Head de Segurança Ocupacional', skills: ['OSHA', 'Prevenção', 'Impossível'], salaryRange: [18000, 28000], desc: 'Implementar segurança no trabalho. Maior desafio da carreira.' }, + { title: 'Director de Parcerias Road Runner', skills: ['Negotiation', 'Diplomacy', 'Ironia'], salaryRange: [22000, 36000], desc: 'Negociar parceria com Papa-Léguas. Status: 75 anos sem resposta.' }, + + // === Especiais e Easter Eggs (jobs 66-69) === + { title: 'Estagiário de Testes de Produto (Urgente)', skills: ['Coragem', 'Agilidade', 'Plano de Saúde'], salaryRange: [800, 2000], desc: 'Testar novos produtos. Benefícios: todos, porque você vai precisar.' }, + { title: 'Ilustrador de Manuais "AVISO!"', skills: ['Illustrator', 'Perigo', 'Criatividade'], salaryRange: [9000, 14000], desc: 'Desenhar os 847 símbolos de aviso que ninguém lê.' }, + { title: 'Filosofo Corporativo de Fracassos', skills: ['Existencialismo', 'Camus', 'Sísifo'], salaryRange: [15000, 25000], desc: 'Dar significado a décadas de falhas. "A luta em si é suficiente para preencher o coração de um Coiote."' }, + { title: 'Narrador de Painéis de Queda', skills: ['Copywriting', 'Timing', 'Onomatopéia'], salaryRange: [10000, 16000], desc: 'Escrever textos para placas que aparecem antes de quedas. Ex: "Epa!", "Uh-oh", "Meep meep não vai me ajudar agora".' }, +]; + +export async function seedAcmeCorp() { + console.log('🏭 Seeding ACME Corporation e 69 vagas hilariantes...'); + + try { + // Get or create a default region + const regionsRes = await pool.query('SELECT id FROM regions LIMIT 1'); + const defaultRegionId = regionsRes.rows[0]?.id || null; + + // 1. Create ACME Company + const acmeSlug = 'acme-corp'; + const acmeCNPJ = '99.999.999/0001-99'; + + await pool.query(` + INSERT INTO companies (name, slug, type, document, address, region_id, phone, email, website, description, verified, active, logo_url) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13) + ON CONFLICT (slug) DO UPDATE SET + name = EXCLUDED.name, + description = EXCLUDED.description, + verified = EXCLUDED.verified, + active = EXCLUDED.active + `, [ + 'ACME Corporation', + acmeSlug, + 'company', + acmeCNPJ, + 'Estrada do Deserto s/n, Monument Valley, Mojave, USA', + defaultRegionId, + '+1-800-ACME-TNT', + 'careers@acme.corp', + 'https://acme.corp', + JSON.stringify({ + tagline: 'Se não explodir, não é ACME! ™', + founded: '1949', + ceo: 'Sr. Big Boss (nunca visto, apenas ouvido)', + mainClient: 'Wile E. Coyote - Cliente Leal há 75 anos', + headquarters: 'Deserto de Mojave (ou qualquer lugar onde o Papa-Léguas esteja)', + mission: 'Fornecer produtos de qualidade duvidosa para perseguição de aves corredoras', + values: ['Inovação Explosiva', 'Entrega Instantânea', 'Garantia de Entretenimento'], + disclaimer: 'ACME não se responsabiliza por lesões, explosões, quedas de penhascos, bigornas na cabeça, ou humilhação pública por um pássaro.' + }), + true, + true, + 'https://upload.wikimedia.org/wikipedia/commons/thumb/6/6f/Wile_E._Coyote_with_Acme_Rocket.svg/200px-Wile_E._Coyote_with_Acme_Rocket.svg.png' + ]); + + // Create Core Company entry + const acmeCoreId = 'acacacac-acac-acac-acac-acacacacacac'; // Memorable UUID + await pool.query(` + INSERT INTO core_companies (id, name, document, status) + VALUES ($1, $2, $3, 'ACTIVE') + ON CONFLICT (id) DO NOTHING + `, [acmeCoreId, 'ACME Corporation', acmeCNPJ]); + + console.log(' ✓ ACME Corporation criada'); + + // 2. Get ACME company ID + const acmeRes = await pool.query("SELECT id FROM companies WHERE slug = 'acme-corp'"); + const acmeCompanyId = acmeRes.rows[0].id; + + // 3. Get or create seed user + await pool.query(` + INSERT INTO users (identifier, password_hash, role, full_name) + VALUES ('wile_e_coyote', '$2b$10$placeholder', 'recruiter', 'Wile E. Coyote - Genius (Self-Proclaimed)') + ON CONFLICT (identifier) DO NOTHING + `); + const seedUserRes = await pool.query("SELECT id FROM users WHERE identifier IN ('wile_e_coyote', 'system_seed') LIMIT 1"); + const seedUserId = seedUserRes.rows[0]?.id || 1; + + // 4. Seed 69 jobs + const workModes = ['onsite', 'hybrid', 'remote']; + const benefits = [ + 'Seguro de Vida Premium (você vai precisar)', + 'Plano de Saúde Ilimitado', + 'Kit de Primeiros Socorros Reforçado', + 'Uniforme À Prova de Explosão (parcial)', + 'Vale Transporte por Catapulta', + 'Vale Refeição (Papa-Léguas não incluso)', + 'Gympass (para correr do Papa-Léguas)', + 'Terapia Pós-Explosão', + 'Desconto em Produtos ACME (use por sua conta e risco)', + 'Home Office no Deserto', + 'Flexible Hours (produtos explodem a qualquer hora)', + 'Stock Options (valor: questionável)' + ]; + + const locations = [ + 'Deserto de Mojave - Anywhere', + 'Monument Valley - Canyon #47', + 'Remote (Qualquer Penhasco)', + 'Hybrid (Escritório + Deserto)', + 'Fábrica ACME - Los Angeles/Toontown Border', + 'Remote (Com vista para crateras)' + ]; + + const levels = ['Junior', 'Pleno', 'Senior', 'Especialista', 'Traumatizado']; + + for (let i = 0; i < 69; i++) { + const template = acmeJobTemplates[i]; + const level = levels[i % levels.length]; + const workMode = workModes[i % 3]; + const location = locations[i % locations.length]; + + const title = `${level} ${template.title}`; + const salaryMin = template.salaryRange[0]; + const salaryMax = template.salaryRange[1]; + + // Select random benefits + const selectedBenefits = []; + for (let b = 0; b < 4; b++) { + selectedBenefits.push(benefits[(i + b) % benefits.length]); + } + + await pool.query(` + INSERT INTO jobs (company_id, created_by, title, description, + salary_min, salary_max, salary_type, employment_type, working_hours, + location, requirements, benefits, visa_support, language_level, status, work_mode) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12, $13, $14, $15, $16) + `, [ + acmeCompanyId, + seedUserId, + title, + `🏭 ACME Corporation está contratando!\n\n${template.desc}\n\nRequisitos:\n- ${template.skills.join('\n- ')}\n- Tolerância a explosões\n- Resistência a quedas de grandes alturas\n- Habilidade de não olhar para baixo\n- Experiência em sobreviver\n\n⚠️ AVISO: ACME Corporation não se responsabiliza por acidentes envolvendo foguetes, bigornas, TNT, buracos pintados, ou Papa-Léguas.\n\n"Se você consegue ler este anúncio, você já é mais qualificado que nosso único cliente." - RH ACME`, + salaryMin, + salaryMax, + 'monthly', + i % 3 === 0 ? 'full-time' : (i % 3 === 1 ? 'contract' : 'part-time'), + workMode === 'remote' ? 'Flexible (Explosões acontecem 24/7)' : '9:00-18:00 (ou até a próxima explosão)', + location, + JSON.stringify(template.skills), + JSON.stringify(selectedBenefits), + i % 5 === 0, // 20% offer visa support + 'beginner', + 'open', + workMode + ]); + } + + console.log(' ✓ 69 vagas ACME criadas com sucesso'); + console.log(' 🎯 Tipos de vaga: Dev, Design, Data, Infra, Liderança, Easter Eggs'); + console.log(' 💀 Disclaimer: Nenhum Coiote foi ferido na criação deste seeder (mentira)'); + + } catch (error) { + console.error(' ❌ Erro ao criar ACME Corp:', error.message); + throw error; + } +} + +// Create a user for Wile E. Coyote +export async function seedWileECoyote() { + console.log('🐺 Criando usuário Wile E. Coyote...'); + + try { + const bcrypt = await import('bcrypt'); + const hash = await bcrypt.default.hash('MeepMeep@123', 10); + + await pool.query(` + INSERT INTO users (identifier, password_hash, role, full_name, email, city, state, bio, title) + VALUES ($1, $2, 'recruiter', $3, $4, $5, $6, $7, $8) + ON CONFLICT (identifier) DO UPDATE SET + full_name = EXCLUDED.full_name, + bio = EXCLUDED.bio + `, [ + 'wile_e_coyote', + hash, + 'Wile E. Coyote', + 'wile@acme.corp', + 'Monument Valley', + 'AZ', + 'Super Gênio autoproclamado. 75 anos de experiência em perseguição de aves corredoras. Especialista em produtos ACME. Taxa de sucesso: confidencial.', + 'HR Manager & Chief Failure Officer' + ]); + + console.log(' ✓ Wile E. Coyote criado (login: wile_e_coyote / senha: MeepMeep@123)'); + + } catch (error) { + console.error(' ❌ Erro ao criar Wile E. Coyote:', error.message); + } +}