gohorsejobs/seeder-api/src/seeders/applications.js
Tiago Yamamoto 4b680f2c31 fix: all seeder INSERT column mismatches
- applications.js: remove UUID id, let DB auto-generate SERIAL
- fictional-companies.js: fix Los Pollos and Springfield to use slug instead of UUID
- fictional-companies.js: fix all VALUES 7 to 6 (16 columns)
- epic-companies.js: fix VALUES 7 to 6
2025-12-24 12:04:01 -03:00

117 lines
4.6 KiB
JavaScript

import { pool } from '../db.js';
import crypto from 'crypto';
/**
* 📝 Applications Seeder
*
* Creates realistic job applications with candidates like:
* - Ana Silva (Senior Full Stack Developer)
* - Carlos Santos (Designer UX/UI)
* - Maria Oliveira (Product Manager)
*/
const candidateProfiles = [
{
name: 'Ana Silva',
email: 'ana.silva@email.com',
phone: '+55 11 99999-1111',
whatsapp: '+55 11 99999-1111',
message: 'Tenho 5 anos de experiência como desenvolvedora Full Stack, trabalhando com React, Node.js e PostgreSQL. Busco uma posição desafiadora onde possa crescer profissionalmente.',
resume_url: 'https://cdn.gohorsejobs.com/docs/ana_silva_cv.pdf',
},
{
name: 'Carlos Santos',
email: 'carlos.santos@email.com',
phone: '+55 11 98888-2222',
whatsapp: '+55 11 98888-2222',
message: 'Designer UX/UI com 3 anos de experiência em produtos digitais. Especialista em Figma, Design Systems e pesquisa com usuários. Portfolio: behance.net/carlossantos',
resume_url: 'https://cdn.gohorsejobs.com/docs/carlos_santos_portfolio.pdf',
},
{
name: 'Maria Oliveira',
email: 'maria.oliveira@email.com',
phone: '+55 21 97777-3333',
whatsapp: '+55 21 97777-3333',
message: 'Product Manager com 4 anos de experiência em startups tech. Certificada em Scrum e experiência com metodologias ágeis. Busco liderar produtos inovadores.',
resume_url: 'https://cdn.gohorsejobs.com/docs/maria_oliveira_resume.pdf',
},
{
name: 'Pedro Costa',
email: 'pedro.costa@email.com',
phone: '+55 11 96666-4444',
whatsapp: '+55 11 96666-4444',
message: 'Desenvolvedor Backend com experiência em Go, Python e microsserviços. Apaixonado por performance e arquitetura de sistemas.',
resume_url: 'https://cdn.gohorsejobs.com/docs/pedro_costa_cv.pdf',
},
{
name: 'Juliana Ferreira',
email: 'juliana.ferreira@email.com',
phone: '+55 11 95555-5555',
whatsapp: '+55 11 95555-5555',
message: 'Data Scientist com mestrado em Machine Learning. Experiência com Python, TensorFlow e análise de dados em larga escala.',
resume_url: 'https://cdn.gohorsejobs.com/docs/juliana_ferreira_cv.pdf',
},
];
const statuses = ['pending', 'reviewed', 'shortlisted', 'rejected', 'hired'];
export async function seedApplications() {
console.log('📝 Seeding applications...');
try {
// Get jobs
const jobsRes = await pool.query('SELECT id, title FROM jobs LIMIT 20');
const jobs = jobsRes.rows;
if (jobs.length === 0) {
console.log(' ⚠️ No jobs found, skipping applications');
return;
}
let totalApps = 0;
// Create applications - each candidate applies to multiple jobs
for (let i = 0; i < candidateProfiles.length; i++) {
const candidate = candidateProfiles[i];
// Each candidate applies to 3-5 random jobs
const numApplications = 3 + (i % 3);
for (let j = 0; j < numApplications && j < jobs.length; j++) {
const job = jobs[(i + j) % jobs.length];
const appId = crypto.randomUUID();
const status = statuses[(i + j) % statuses.length];
// Calculate a random date in the past 30 days
const daysAgo = Math.floor(Math.random() * 30);
const createdAt = new Date();
createdAt.setDate(createdAt.getDate() - daysAgo);
await pool.query(`
INSERT INTO applications (job_id, name, email, phone, whatsapp, message, resume_url, status, created_at, updated_at)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)
ON CONFLICT DO NOTHING
`, [
job.id,
candidate.name,
candidate.email,
candidate.phone,
candidate.whatsapp,
`${candidate.message}\n\nInteressado na vaga: ${job.title}`,
candidate.resume_url,
status,
createdAt,
createdAt
]);
totalApps++;
}
}
console.log(`${totalApps} applications criadas`);
console.log(` 👤 Candidatos: Ana Silva, Carlos Santos, Maria Oliveira, Pedro Costa, Juliana Ferreira`);
} catch (error) {
console.error(' ❌ Error seeding applications:', error.message);
throw error;
}
}