diff --git a/seeder-api/README.md b/seeder-api/README.md index 7d1f134..17e6eaf 100644 --- a/seeder-api/README.md +++ b/seeder-api/README.md @@ -38,6 +38,52 @@ A ACME Corp é nossa empresa especial com **69 vagas de tecnologia com humor**, - 🎨 UX Designer de Dinamite - E mais 62 vagas hilárias... +--- + +## 🦸 Stark Industries (Marvel) + +> "Changing the World for a Better Tomorrow" + +**8 vagas** de alta tecnologia no universo Marvel: +- ☁️ Arquiteto de Cloud para J.A.R.V.I.S. +- ⚡ DevOps Engineer do Arc Reactor +- 🤖 ML Engineer para Iron Man Suits +- 🛡️ Security Engineer Anti-Hydra +- 🔬 Nanotechnology Software Engineer + +**Sede:** Stark Tower, Manhattan, NY + +--- + +## 🐔 Los Pollos Hermanos (Breaking Bad) + +> "Taste the Family!" + +**4 vagas** para quem gosta de discrição absoluta: +- 🔒 Engenheiro de Redes Air-Gapped +- 👻 Dev Fullstack de Logística Fantasma +- 🎯 Pentester Especialista em Segurança Ofensiva +- 🗄️ DBA com Expertise em Data Purge + +**CEO:** Gustavo Fring +**Nota:** NDA de 847 páginas obrigatório + +--- + +## ☢️ Springfield Nuclear Power Plant (Simpsons) + +> "Excellent..." + +**4 vagas** com orçamento mínimo do Sr. Burns: +- 💾 Administrador de Sistemas COBOL/Mainframe (desde 1970) +- 🐘 Dev Fullstack Low Cost (PHP 4 / jQuery) +- 📹 Especialista em Cyber-Segurança e Vigilância +- 📊 Engenheiro de Dados e Analytics de Produtividade + +**CEO:** C. Montgomery Burns (103 anos) +**Inspetor de Segurança:** Homer J. Simpson + + --- ## 🚀 Uso diff --git a/seeder-api/src/index.js b/seeder-api/src/index.js index 962cf75..c4ef6ab 100644 --- a/seeder-api/src/index.js +++ b/seeder-api/src/index.js @@ -6,6 +6,7 @@ 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'; +import { seedFictionalCompanies } from './seeders/fictional-companies.js'; async function resetDatabase() { console.log('🗑️ Resetting database...'); @@ -61,6 +62,7 @@ async function seedDatabase() { await seedJobs(); await seedAcmeCorp(); // 🏭 ACME Corp + 69 vagas hilariantes await seedWileECoyote(); // 🐺 Wile E. Coyote user + await seedFictionalCompanies(); // 🎬 Stark Industries, Los Pollos, Springfield Nuclear await seedApplications(); console.log('\n✅ Database seeding completed successfully!'); @@ -68,9 +70,12 @@ async function seedDatabase() { console.log(' - Regions seeded'); console.log(' - Cities seeded'); console.log(' - 1 SuperAdmin'); - console.log(' - 31 Companies (30 + ACME Corp)'); - console.log(' - 1059 Jobs (990 + 69 ACME)'); + console.log(' - 34 Companies (30 + ACME + Stark + LosPollos + Springfield)'); + console.log(' - 1075 Jobs (990 + 69 ACME + 8 Stark + 4 LosPollos + 4 Springfield)'); console.log(' - 🏭 ACME Corp: 69 vagas com humor tech'); + console.log(' - 🦸 Stark Industries: 8 vagas Marvel'); + console.log(' - 🐔 Los Pollos Hermanos: 4 vagas Breaking Bad'); + console.log(' - ☢️ Springfield Nuclear: 4 vagas Simpsons'); 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/fictional-companies.js b/seeder-api/src/seeders/fictional-companies.js new file mode 100644 index 0000000..9955cb7 --- /dev/null +++ b/seeder-api/src/seeders/fictional-companies.js @@ -0,0 +1,405 @@ +import { pool } from '../db.js'; +import crypto from 'crypto'; + +/** + * 🏢 Empresas Fictícias Icônicas + * + * - Stark Industries (Marvel) + * - Los Pollos Hermanos (Breaking Bad) + * - Springfield Nuclear Power Plant (Simpsons) + */ + +// ============================================================================ +// 🦾 STARK INDUSTRIES - Marvel Cinematic Universe +// ============================================================================ +const starkJobs = [ + { + title: 'Arquiteto de Cloud para J.A.R.V.I.S.', + skills: ['AWS', 'Kubernetes', 'AI Infrastructure', 'Zero Latency'], + salaryRange: [35000, 60000], + desc: 'Gerenciar a infraestrutura que roda a J.A.R.V.I.S. e F.R.I.D.A.Y. Latência máxima tolerada: 0.001ms. Se a IA não responder "Sim, senhor" instantaneamente, você será substituído por um robô.', + workMode: 'hybrid' + }, + { + title: 'DevOps Engineer do Arc Reactor', + skills: ['Docker', 'Terraform', 'Nuclear Fusion', 'CI/CD'], + salaryRange: [30000, 50000], + desc: 'Manter uptime de 99.9999% no Arc Reactor. Downtime = Tony Stark irritado = você procurando novo emprego. Bônus: café infinito e acesso ao laboratório.', + workMode: 'onsite' + }, + { + title: 'Engenheiro de Machine Learning para Iron Man Suits', + skills: ['PyTorch', 'Computer Vision', 'Real-time Processing', 'Jarvis SDK'], + salaryRange: [40000, 70000], + desc: 'Treinar modelos de IA para as armaduras Mark 1-85. Dataset inclui 847 batalhas e 12.000 horas de voo. Modelo atual: accuracy 99.7%, meta: 100% (Tony é perfeccionista).', + workMode: 'onsite' + }, + { + title: 'Security Engineer Anti-Hydra', + skills: ['Penetration Testing', 'Cryptography', 'S.H.I.E.L.D. Protocols'], + salaryRange: [35000, 55000], + desc: 'Proteger sistemas contra ataques da Hydra, AIM e hackers russos. Última brecha resultou em Ultron. Não queremos outro Ultron.', + workMode: 'remote' + }, + { + title: 'Full Stack Developer do Stark Phone', + skills: ['React Native', 'Holographic UI', 'Biometrics'], + salaryRange: [28000, 45000], + desc: 'Desenvolver apps para o smartphone mais avançado do mundo. Features incluem: projeção holográfica, IA integrada e autodestruição remota.', + workMode: 'hybrid' + }, + { + title: 'Data Engineer do Projeto Insight', + skills: ['Spark', 'Real-time Analytics', 'Predictive Modeling'], + salaryRange: [32000, 52000], + desc: 'Processar dados de satélites e drones em tempo real. Nota: Projeto original foi cancelado por razões éticas. Este é o Insight 2.0 (ético, prometemos).', + workMode: 'onsite' + }, + { + title: 'SRE do Complexo dos Vingadores', + skills: ['Kubernetes', 'Prometheus', 'Chaos Engineering'], + salaryRange: [33000, 53000], + desc: 'Garantir que sistemas críticos sobrevivam a ataques alienígenas. SLA: sistema deve funcionar durante invasões Chitauri. PagerDuty: configurado para alertas intergaláticos.', + workMode: 'onsite' + }, + { + title: 'Nanotechnology Software Engineer', + skills: ['Embedded Systems', 'Nano-robotics', 'Real-time OS'], + salaryRange: [45000, 75000], + desc: 'Programar nanobots da armadura Mark 50+. Cada nanobot executa código. São 12 milhões de processos paralelos. Boa sorte debugando.', + workMode: 'onsite' + } +]; + +// ============================================================================ +// 🐔 LOS POLLOS HERMANOS - Breaking Bad +// ============================================================================ +const losPollosJobs = [ + { + title: 'Engenheiro de Redes Air-Gapped', + skills: ['Cisco', 'VPN Layer 2', 'Criptografia Ponta-a-Ponta', 'Paranoia'], + salaryRange: [25000, 45000], + desc: 'Configurar e manter redes completamente isoladas da internet para os "laboratórios de temperos". Se um pacote de dados vazar, Gus Fring terá uma conversa muito calma com você. Muito. Calma.', + workMode: 'onsite' + }, + { + title: 'Desenvolvedor Fullstack de Logística Fantasma', + skills: ['NestJS', 'PostgreSQL', 'Geofencing', 'Discrição'], + salaryRange: [22000, 40000], + desc: 'Manter sistema de rastreamento de frotas de "temperos". Camada oculta mostra carga real apenas para usuários nível 5. Logs se auto-destroem em 24h. Código limpo, sem comentários sarcásticos.', + workMode: 'hybrid' + }, + { + title: 'Pentester Especialista em Segurança Ofensiva', + skills: ['Ethical Hacking', 'Câmeras IP', 'Interceptação de Rádio', 'Silêncio'], + salaryRange: [28000, 50000], + desc: 'Simular ataques da DEA e cartéis rivais aos nossos sistemas. Zero vulnerabilidades toleradas. Um vazamento aqui não resulta em multa LGPD, resulta em "demissão definitiva".', + workMode: 'onsite' + }, + { + title: 'DBA Arquiteto de Dados com Expertise em Purge', + skills: ['PostgreSQL', 'PostGIS', 'Data Scrubbing', 'Amnésia Seletiva'], + salaryRange: [24000, 42000], + desc: 'Gerenciar banco de dados de fornecedores e rotas de distribuição. Implementar rotinas rigorosas de limpeza. Dados devem ser consistentes mas fáceis de apagar em caso de visita inesperada.', + workMode: 'onsite' + } +]; + +// ============================================================================ +// ☢️ SPRINGFIELD NUCLEAR POWER PLANT - The Simpsons +// ============================================================================ +const springfieldJobs = [ + { + title: 'Administrador de Sistemas Legados COBOL/Mainframe', + skills: ['COBOL', 'Fortran', 'Monitores CRT', 'Paciência Infinita'], + salaryRange: [8000, 15000], + desc: 'Manter sistemas que controlam o núcleo do reator desde 1970. Hardware não é atualizado há 50 anos. Orçamento para modernização: $0. O Sr. Burns disse "Excelente" e saiu.', + workMode: 'onsite' + }, + { + title: 'Desenvolvedor Fullstack Low Cost (PHP 4 / jQuery)', + skills: ['PHP 4', 'jQuery 1.x', 'MySQL 3', 'Gambiarra'], + salaryRange: [6000, 12000], + desc: 'Criar sistema de vigilância de funcionários. Requisito: consertar o que Homer quebra diariamente. Pagamento: 70% salário + 30% tickets de cafeteria + chaveiro radioativo.', + workMode: 'onsite' + }, + { + title: 'Especialista em Cyber-Segurança e Vigilância', + skills: ['Firewalls Antigos', 'Câmeras Analógicas', 'Cães de Guarda', 'Release the Hounds'], + salaryRange: [10000, 18000], + desc: 'Impedir funcionários de acessar sites de emprego. Garantir que câmeras do Sr. Burns nunca desliguem. Firewall atual: 486 guardado por cães. Hardware ocasionalmente brilha no escuro.', + workMode: 'onsite' + }, + { + title: 'Engenheiro de Dados e Analytics de Produtividade', + skills: ['Excel 97', 'Papel Contínuo', 'Impressora Matricial', 'Negatividade'], + salaryRange: [7000, 13000], + desc: 'Gerar relatórios provando que Setor 7-G (Homer) é o menos produtivo da história da energia nuclear. KPIs: acidentes/mês, donuts consumidos, cochilos no painel de controle.', + workMode: 'onsite' + } +]; + +// ============================================================================ +// Seeder Functions +// ============================================================================ + +export async function seedStarkIndustries() { + console.log('🦾 Seeding Stark Industries (Marvel)...'); + + try { + const regionsRes = await pool.query('SELECT id FROM regions LIMIT 1'); + const defaultRegionId = regionsRes.rows[0]?.id || null; + + // Create Company + await pool.query(` + INSERT INTO companies (name, slug, type, document, address, region_id, phone, email, website, description, verified, active) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) + ON CONFLICT (slug) DO UPDATE SET name = EXCLUDED.name, description = EXCLUDED.description + `, [ + 'Stark Industries', + 'stark-industries', + 'company', + '77.777.777/0001-77', + 'Stark Tower, 200 Park Avenue, Manhattan, New York, NY 10166', + defaultRegionId, + '+1-212-STARK-01', + 'careers@starkindustries.com', + 'https://starkindustries.com', + JSON.stringify({ + tagline: 'Changing the World for a Better Tomorrow', + founded: '1939 (Howard Stark)', + ceo: 'Pepper Potts (ex-CEO: Tony Stark)', + products: ['Arc Reactor', 'Iron Man Suits', 'Clean Energy', 'AI Systems'], + locations: ['Manhattan (HQ)', 'Malibu (R&D)', 'Upstate NY (Avengers Compound)'], + perks: ['Trabalhar com Vingadores', 'Acesso à J.A.R.V.I.S.', 'Café com Happy Hogan'] + }), + true, + true + ]); + + // Core Company + await pool.query(` + INSERT INTO core_companies (id, name, document, status) + VALUES ($1, $2, $3, 'ACTIVE') + ON CONFLICT (id) DO NOTHING + `, ['57575757-5757-5757-5757-575757575757', 'Stark Industries', '77.777.777/0001-77']); + + // Get company ID + const companyRes = await pool.query("SELECT id FROM companies WHERE slug = 'stark-industries'"); + const companyId = companyRes.rows[0].id; + + // Get seed user + const seedUserRes = await pool.query("SELECT id FROM users WHERE identifier IN ('system_seed', 'wile_e_coyote') LIMIT 1"); + const seedUserId = seedUserRes.rows[0]?.id || 1; + + // Create jobs + const benefits = ['Seguro Stark Premium', 'Acesso ao Laboratório', 'Café com J.A.R.V.I.S.', 'Voo de teste nas armaduras (após 1 ano)']; + + for (let i = 0; i < starkJobs.length; i++) { + const job = starkJobs[i]; + 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) + `, [ + companyId, + seedUserId, + job.title, + `🦾 STARK INDUSTRIES está contratando!\n\n${job.desc}\n\nRequisitos:\n- ${job.skills.join('\n- ')}\n- Capacidade de trabalhar sob pressão (literalmente, durante batalhas)\n- Não se intimidar com super-heróis\n\n"I am Iron Man." - Tony Stark`, + job.salaryRange[0], + job.salaryRange[1], + 'monthly', + 'full-time', + job.workMode === 'remote' ? 'Flexible' : '9:00-18:00 (ou durante emergências globais)', + job.workMode === 'remote' ? 'Remote (Terra ou Órbita)' : 'Stark Tower, Manhattan, NY', + JSON.stringify(job.skills), + JSON.stringify(benefits), + true, + 'fluent', + 'open', + job.workMode + ]); + } + + console.log(` ✓ Stark Industries: ${starkJobs.length} vagas criadas`); + } catch (error) { + console.error(' ❌ Erro Stark Industries:', error.message); + } +} + +export async function seedLosPollosHermanos() { + console.log('🐔 Seeding Los Pollos Hermanos (Breaking Bad)...'); + + try { + const regionsRes = await pool.query('SELECT id FROM regions LIMIT 1'); + const defaultRegionId = regionsRes.rows[0]?.id || null; + + // Create Company + await pool.query(` + INSERT INTO companies (name, slug, type, document, address, region_id, phone, email, website, description, verified, active) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) + ON CONFLICT (slug) DO UPDATE SET name = EXCLUDED.name, description = EXCLUDED.description + `, [ + 'Los Pollos Hermanos', + 'los-pollos-hermanos', + 'company', + '66.666.666/0001-66', + '308 Negra Arroyo Lane, Albuquerque, NM 87104', + defaultRegionId, + '+1-505-POLLOS', + 'careers@lospollos.com', + 'https://lospollos.com', + JSON.stringify({ + tagline: 'Taste the Family!', + founded: '1989', + ceo: 'Gustavo Fring', + products: ['Frango Frito', 'Curly Fries', 'Especiarias Especiais'], + culture: 'Ambiente familiar, gestão rigorosa, zero tolerância a erros', + note: 'Todas as vagas requerem background check e assinatura de NDA de 847 páginas' + }), + true, + true + ]); + + // Core Company + await pool.query(` + INSERT INTO core_companies (id, name, document, status) + VALUES ($1, $2, $3, 'ACTIVE') + ON CONFLICT (id) DO NOTHING + `, ['66666666-6666-6666-6666-666666666666', 'Los Pollos Hermanos', '66.666.666/0001-66']); + + // Get company ID + const companyRes = await pool.query("SELECT id FROM companies WHERE slug = 'los-pollos-hermanos'"); + const companyId = companyRes.rows[0].id; + + const seedUserRes = await pool.query("SELECT id FROM users WHERE identifier IN ('system_seed', 'wile_e_coyote') LIMIT 1"); + const seedUserId = seedUserRes.rows[0]?.id || 1; + + const benefits = ['Frango Grátis (apenas o legal)', 'Plano de Saúde Premium', 'Seguro de Vida Reforçado', 'Carro da Empresa (GPS desativado)']; + + for (let i = 0; i < losPollosJobs.length; i++) { + const job = losPollosJobs[i]; + 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) + `, [ + companyId, + seedUserId, + job.title, + `🐔 LOS POLLOS HERMANOS está contratando!\n\n${job.desc}\n\nRequisitos:\n- ${job.skills.join('\n- ')}\n- Discrição absoluta\n- Capacidade de manter segredos\n- Não fazer perguntas\n\n"I hide in plain sight, same as you." - Gus Fring`, + job.salaryRange[0], + job.salaryRange[1], + 'monthly', + 'full-time', + '6:00-22:00 (turnos rotativos)', + 'Albuquerque, NM (Sede Secreta)', + JSON.stringify(job.skills), + JSON.stringify(benefits), + false, + 'advanced', + 'open', + job.workMode + ]); + } + + console.log(` ✓ Los Pollos Hermanos: ${losPollosJobs.length} vagas criadas`); + } catch (error) { + console.error(' ❌ Erro Los Pollos Hermanos:', error.message); + } +} + +export async function seedSpringfieldNuclear() { + console.log('☢️ Seeding Springfield Nuclear Power Plant (Simpsons)...'); + + try { + const regionsRes = await pool.query('SELECT id FROM regions LIMIT 1'); + const defaultRegionId = regionsRes.rows[0]?.id || null; + + // Create Company + await pool.query(` + INSERT INTO companies (name, slug, type, document, address, region_id, phone, email, website, description, verified, active) + VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12) + ON CONFLICT (slug) DO UPDATE SET name = EXCLUDED.name, description = EXCLUDED.description + `, [ + 'Springfield Nuclear Power Plant', + 'springfield-nuclear', + 'company', + '88.888.888/0001-88', + '100 Industrial Way, Springfield, State Unknown', + defaultRegionId, + '+1-555-BURNS', + 'careers@snpp.com', + 'https://snpp.com', + JSON.stringify({ + tagline: 'Excellent...', + founded: '1968', + ceo: 'Charles Montgomery Burns (103 anos)', + assistant: 'Waylon Smithers Jr.', + safetyOfficer: 'Homer J. Simpson (Setor 7-G)', + incidents: '342 por ano (média)', + mascot: 'Blinky (peixe de 3 olhos)', + values: ['Lucro máximo', 'Custo mínimo', 'Segurança opcional'] + }), + true, + true + ]); + + // Core Company + await pool.query(` + INSERT INTO core_companies (id, name, document, status) + VALUES ($1, $2, $3, 'ACTIVE') + ON CONFLICT (id) DO NOTHING + `, ['88888888-8888-8888-8888-888888888888', 'Springfield Nuclear Power Plant', '88.888.888/0001-88']); + + // Get company ID + const companyRes = await pool.query("SELECT id FROM companies WHERE slug = 'springfield-nuclear'"); + const companyId = companyRes.rows[0].id; + + const seedUserRes = await pool.query("SELECT id FROM users WHERE identifier IN ('system_seed', 'wile_e_coyote') LIMIT 1"); + const seedUserId = seedUserRes.rows[0]?.id || 1; + + const benefits = ['Tickets de Cafeteria', 'Dosímetro Pessoal', 'Desconto na Taverna do Moe', 'Estacionamento (longe do reator)']; + + for (let i = 0; i < springfieldJobs.length; i++) { + const job = springfieldJobs[i]; + 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) + `, [ + companyId, + seedUserId, + job.title, + `☢️ SPRINGFIELD NUCLEAR POWER PLANT está contratando!\n\n${job.desc}\n\nRequisitos:\n- ${job.skills.join('\n- ')}\n- Tolerância a radiação (medida em donuts/hora)\n- Não questionar ordens do Sr. Burns\n- Disponibilidade para trabalhar no Setor 7-G\n\n"Excelente..." - Sr. Burns`, + job.salaryRange[0], + job.salaryRange[1], + 'monthly', + 'full-time', + '6:00-18:00 (horas extras obrigatórias)', + 'Springfield Nuclear Power Plant, Setor 7-G', + JSON.stringify(job.skills), + JSON.stringify(benefits), + false, + 'beginner', + 'open', + job.workMode + ]); + } + + console.log(` ✓ Springfield Nuclear: ${springfieldJobs.length} vagas criadas`); + } catch (error) { + console.error(' ❌ Erro Springfield Nuclear:', error.message); + } +} + +// Export all seeders +export async function seedFictionalCompanies() { + await seedStarkIndustries(); + await seedLosPollosHermanos(); + await seedSpringfieldNuclear(); + console.log(' 🎬 Todas as empresas fictícias criadas!'); +}