feat(seeder): add job tags seeder

- Created seeders/tags.js with area, level, and stack categories
- Area: Engineering, Design, Product, Marketing, Sales, etc.
- Level: Intern, Junior, Mid, Senior, Lead, Staff, Manager, etc.
- Stack: JavaScript, Python, Go, React, Node.js, AWS, Docker, etc.
- 79+ tags in total
This commit is contained in:
Tiago Yamamoto 2025-12-26 01:04:29 -03:00
parent e47c25fac8
commit 3d7612901d
2 changed files with 119 additions and 0 deletions

View file

@ -8,6 +8,7 @@ import { seedAcmeCorp, seedWileECoyote } from './seeders/acme.js';
import { seedFictionalCompanies } from './seeders/fictional-companies.js';
import { seedEpicCompanies } from './seeders/epic-companies.js';
import { seedNotifications } from './seeders/notifications.js';
import { seedTags } from './seeders/tags.js';
async function resetDatabase() {
console.log('🗑️ Resetting database...');
@ -87,6 +88,7 @@ async function seedDatabase() {
await seedEpicCompanies(); // 🌟 BNL, Cyberdyne, Wonka, Wayne, Oceanic, InGen, Bubba Gump, Umbrella, Sprawl-Mart
await seedApplications(); // 📝 Applications from candidates
await seedNotifications(); // 🔔 Notifications for dashboard
await seedTags(); // 🏷️ Job tags (area, level, stack)
console.log('\n✅ Database seeding completed successfully!');
console.log('\n📊 Summary:');
@ -143,6 +145,7 @@ async function seedDatabaseLite() {
await seedEpicCompanies();
await seedApplications();
await seedNotifications();
await seedTags();
console.log('\n✅ Database seeding (LITE) completed successfully!');
console.log(' ⚡ Cities skipped for faster seeding');
@ -179,6 +182,7 @@ async function seedDatabaseNoLocations() {
await seedEpicCompanies();
await seedApplications();
await seedNotifications();
await seedTags();
console.log('\n✅ Database seeding (NO LOCATIONS) completed successfully!');
console.log(' ⏭️ All location data skipped (continents, countries, states, cities)');

View file

@ -0,0 +1,115 @@
/**
* Tags Seeder
* Seeds job_tags table with categories: area, level, stack
*/
const seedTags = async (pool) => {
console.log('🏷️ Seeding job tags...');
const tags = [
// Area (Departamento/Área)
{ name: 'Engineering', category: 'area' },
{ name: 'Design', category: 'area' },
{ name: 'Product', category: 'area' },
{ name: 'Marketing', category: 'area' },
{ name: 'Sales', category: 'area' },
{ name: 'Customer Success', category: 'area' },
{ name: 'Human Resources', category: 'area' },
{ name: 'Finance', category: 'area' },
{ name: 'Operations', category: 'area' },
{ name: 'Data', category: 'area' },
{ name: 'Quality Assurance', category: 'area' },
{ name: 'DevOps', category: 'area' },
{ name: 'Security', category: 'area' },
{ name: 'Legal', category: 'area' },
{ name: 'Administrative', category: 'area' },
// Level (Nível)
{ name: 'Intern', category: 'level' },
{ name: 'Junior', category: 'level' },
{ name: 'Mid-Level', category: 'level' },
{ name: 'Senior', category: 'level' },
{ name: 'Lead', category: 'level' },
{ name: 'Staff', category: 'level' },
{ name: 'Principal', category: 'level' },
{ name: 'Manager', category: 'level' },
{ name: 'Director', category: 'level' },
{ name: 'VP', category: 'level' },
{ name: 'C-Level', category: 'level' },
// Stack (Tecnologias)
{ name: 'JavaScript', category: 'stack' },
{ name: 'TypeScript', category: 'stack' },
{ name: 'Python', category: 'stack' },
{ name: 'Go', category: 'stack' },
{ name: 'Java', category: 'stack' },
{ name: 'C#', category: 'stack' },
{ name: 'Ruby', category: 'stack' },
{ name: 'PHP', category: 'stack' },
{ name: 'Rust', category: 'stack' },
{ name: 'Swift', category: 'stack' },
{ name: 'Kotlin', category: 'stack' },
{ name: 'React', category: 'stack' },
{ name: 'Vue.js', category: 'stack' },
{ name: 'Angular', category: 'stack' },
{ name: 'Next.js', category: 'stack' },
{ name: 'Node.js', category: 'stack' },
{ name: 'NestJS', category: 'stack' },
{ name: 'Django', category: 'stack' },
{ name: 'FastAPI', category: 'stack' },
{ name: 'Spring Boot', category: 'stack' },
{ name: '.NET', category: 'stack' },
{ name: 'Ruby on Rails', category: 'stack' },
{ name: 'Laravel', category: 'stack' },
{ name: 'PostgreSQL', category: 'stack' },
{ name: 'MySQL', category: 'stack' },
{ name: 'MongoDB', category: 'stack' },
{ name: 'Redis', category: 'stack' },
{ name: 'Elasticsearch', category: 'stack' },
{ name: 'Docker', category: 'stack' },
{ name: 'Kubernetes', category: 'stack' },
{ name: 'AWS', category: 'stack' },
{ name: 'GCP', category: 'stack' },
{ name: 'Azure', category: 'stack' },
{ name: 'Terraform', category: 'stack' },
{ name: 'GraphQL', category: 'stack' },
{ name: 'REST API', category: 'stack' },
{ name: 'Figma', category: 'stack' },
{ name: 'Tailwind CSS', category: 'stack' },
{ name: 'Git', category: 'stack' },
{ name: 'CI/CD', category: 'stack' },
{ name: 'Agile/Scrum', category: 'stack' },
];
let inserted = 0;
let skipped = 0;
for (const tag of tags) {
try {
// Check if tag already exists
const exists = await pool.query(
'SELECT id FROM job_tags WHERE name = $1 AND category = $2',
[tag.name, tag.category]
);
if (exists.rows.length > 0) {
skipped++;
continue;
}
await pool.query(
`INSERT INTO job_tags (name, category, active, created_at, updated_at)
VALUES ($1, $2, true, NOW(), NOW())`,
[tag.name, tag.category]
);
inserted++;
} catch (error) {
console.error(` ❌ Error inserting tag ${tag.name}:`, error.message);
}
}
console.log(` ✅ Tags: ${inserted} inserted, ${skipped} skipped (already exist)`);
return { inserted, skipped };
};
module.exports = { seedTags };