import { db } from './connection'; import { users, categories, sources, apiKeys, sourceCategories } from './schema'; import * as bcrypt from 'bcryptjs'; export async function seedDatabase() { try { console.log('🌱 Seeding database...'); // Insert categories one by one const categoryData = [ { name: 'Hoax', slug: 'hoax', description: 'Šírenie nepravdivých informácií a hoaxov', color: '#EF4444', priority: 5, icon: 'AlertTriangle' }, { name: 'Hate Speech', slug: 'hate-speech', description: 'Nenávistné prejavy proti skupinám ľudí', color: '#DC2626', priority: 5, icon: 'MessageSquareX' }, { name: 'Violence', slug: 'violence', description: 'Povzbudzovanie k násiliu', color: '#B91C1C', priority: 5, icon: 'Sword' }, { name: 'Conspiracy', slug: 'conspiracy', description: 'Konšpiračné teórie', color: '#F59E0B', priority: 3, icon: 'Eye' }, { name: 'Propaganda', slug: 'propaganda', description: 'Politická propaganda a manipulácia', color: '#D97706', priority: 2, icon: 'Megaphone' } ]; const insertedCategories = []; for (const cat of categoryData) { const result = await db.insert(categories).values(cat).returning(); insertedCategories.push(result[0]); console.log(`✅ Inserted category: ${cat.name}`); } // Insert admin user const hashedPassword = await bcrypt.hash('admin123', 12); const insertedUsers = await db.insert(users).values({ email: 'admin@antihoax.sk', passwordHash: hashedPassword, name: 'System Admin', role: 'admin' }).returning(); console.log(`✅ Inserted user: ${insertedUsers[0].name}`); // Insert example sources const sourceData = [ { url: 'https://example-hoax-site.com', domain: 'example-hoax-site.com', title: 'Example Hoax Site', description: 'Príklad hoax stránky pre testovanie', type: 'website' as const, status: 'verified' as const, riskLevel: 5, language: 'sk' as const, reportedBy: 'test@example.com', verifiedBy: insertedUsers[0].id, followerCount: 1500, metadata: JSON.stringify({ tags: ['test', 'example'] }) }, { url: 'https://example-conspiracy.com', domain: 'example-conspiracy.com', title: 'Conspiracy Theory Site', description: 'Stránka šíriaca konšpiračné teórie', type: 'blog' as const, status: 'verified' as const, riskLevel: 3, language: 'sk' as const, reportedBy: 'reporter@example.com', verifiedBy: insertedUsers[0].id, followerCount: 850, metadata: JSON.stringify({ tags: ['conspiracy', 'politics'] }) } ]; const insertedSources = []; for (const src of sourceData) { const result = await db.insert(sources).values(src).returning(); insertedSources.push(result[0]); console.log(`✅ Inserted source: ${src.title}`); } // Link sources with categories await db.insert(sourceCategories).values({ sourceId: insertedSources[0].id, categoryId: insertedCategories[0].id, // Hoax confidenceScore: '1.0', addedBy: insertedUsers[0].id }); await db.insert(sourceCategories).values({ sourceId: insertedSources[1].id, categoryId: insertedCategories[3].id, // Conspiracy confidenceScore: '0.9', addedBy: insertedUsers[0].id }); console.log(`✅ Linked sources with categories`); console.log('🎉 Database seeded successfully!'); console.log('📧 Admin login: admin@antihoax.sk / admin123'); } catch (error) { console.error('❌ Error seeding database:', error); throw error; } }