- 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
117 lines
4.6 KiB
JavaScript
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;
|
|
}
|
|
}
|