File: /var/www/indoadvisory_new/web2/webapp/scripts/seed.js
const bcrypt = require('bcryptjs');
const { db } = require('../config/database');
require('dotenv').config();
async function seedDatabase() {
console.log('đą Seeding database with initial data...');
try {
// Create admin user
const adminEmail = process.env.ADMIN_EMAIL || 'admin@indoadvisory.com';
const adminPassword = process.env.ADMIN_PASSWORD || 'admin123';
const adminName = process.env.ADMIN_NAME || 'System Administrator';
// Check if admin already exists
const existingAdmin = await db.query(
'SELECT id FROM users WHERE email = $1',
[adminEmail]
);
if (existingAdmin.rows.length === 0) {
const hashedPassword = await bcrypt.hash(adminPassword, 12);
await db.query(`
INSERT INTO users (email, password_hash, name, role)
VALUES ($1, $2, $3, 'admin')
`, [adminEmail, hashedPassword, adminName]);
console.log('â
Admin user created');
console.log(`đ§ Email: ${adminEmail}`);
console.log(`đ Password: ${adminPassword}`);
console.log('â ī¸ IMPORTANT: Change the default password after first login!');
} else {
console.log('âšī¸ Admin user already exists, skipping...');
}
// Insert company settings
const settings = [
{
key: 'company_name_en',
value_en: 'Indo Advisory',
value_id: 'Indo Advisory',
description: 'Company name'
},
{
key: 'company_tagline_en',
value_en: 'Leading Private Equity Firm in Indonesia',
value_id: 'Firma Ekuitas Swasta Terkemuka di Indonesia',
description: 'Company tagline'
},
{
key: 'company_description_en',
value_en: 'Indo Advisory is a premier private equity firm focused on growth investments in Indonesian companies. We partner with exceptional management teams to build sustainable, market-leading businesses.',
value_id: 'Indo Advisory adalah firma ekuitas swasta terkemuka yang fokus pada investasi pertumbuhan di perusahaan Indonesia. Kami bermitra dengan tim manajemen luar biasa untuk membangun bisnis yang berkelanjutan dan memimpin pasar.',
description: 'Company description'
},
{
key: 'contact_email',
value_en: 'info@indoadvisory.com',
value_id: 'info@indoadvisory.com',
description: 'Contact email'
},
{
key: 'contact_phone',
value_en: '+62 21 1234 5678',
value_id: '+62 21 1234 5678',
description: 'Contact phone'
},
{
key: 'office_address_en',
value_en: 'Menara Mandiri II, 15th Floor<br>Jl. Jend. Sudirman Kav. 54-55<br>Jakarta 12190, Indonesia',
value_id: 'Menara Mandiri II, Lantai 15<br>Jl. Jend. Sudirman Kav. 54-55<br>Jakarta 12190, Indonesia',
description: 'Office address'
}
];
for (const setting of settings) {
await db.query(`
INSERT INTO settings (key, value_en, value_id, description, is_public)
VALUES ($1, $2, $3, $4, true)
ON CONFLICT (key) DO UPDATE SET
value_en = EXCLUDED.value_en,
value_id = EXCLUDED.value_id,
updated_at = CURRENT_TIMESTAMP
`, [setting.key, setting.value_en, setting.value_id, setting.description]);
}
console.log('â
Company settings inserted');
// Insert sample team members
const teamMembers = [
{
name: 'Budi Santoso',
position_en: 'Managing Partner & CEO',
position_id: 'Managing Partner & CEO',
bio_en: 'Budi has over 20 years of experience in private equity and investment banking in Southeast Asia. He previously worked at leading global investment firms and has extensive experience in growth capital and buyout transactions.',
bio_id: 'Budi memiliki pengalaman lebih dari 20 tahun di bidang ekuitas swasta dan perbankan investasi di Asia Tenggara. Sebelumnya bekerja di firma investasi global terkemuka dengan pengalaman luas dalam modal pertumbuhan dan transaksi akuisisi.',
email: 'budi@indoadvisory.com',
display_order: 1,
is_featured: true
},
{
name: 'Sari Wijaya',
position_en: 'Investment Director',
position_id: 'Direktur Investasi',
bio_en: 'Sari leads our investment team with expertise in consumer goods, technology, and healthcare sectors. She holds an MBA from INSEAD and has 15 years of experience in venture capital and private equity.',
bio_id: 'Sari memimpin tim investasi kami dengan keahlian di sektor barang konsumen, teknologi, dan kesehatan. Lulusan MBA INSEAD dengan 15 tahun pengalaman di venture capital dan ekuitas swasta.',
email: 'sari@indoadvisory.com',
display_order: 2,
is_featured: true
},
{
name: 'Ahmad Rahman',
position_en: 'Senior Vice President',
position_id: 'Senior Vice President',
bio_en: 'Ahmad focuses on due diligence and portfolio management. He brings deep operational expertise from his previous roles in consulting and corporate development at Fortune 500 companies.',
bio_id: 'Ahmad fokus pada uji tuntas dan manajemen portofolio. Membawa keahlian operasional mendalam dari peran sebelumnya di konsulting dan pengembangan korporat di perusahaan Fortune 500.',
email: 'ahmad@indoadvisory.com',
display_order: 3,
is_featured: false
}
];
for (const member of teamMembers) {
await db.query(`
INSERT INTO team_members (name, position_en, position_id, bio_en, bio_id, email, display_order, is_featured)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8)
ON CONFLICT DO NOTHING
`, [member.name, member.position_en, member.position_id, member.bio_en, member.bio_id, member.email, member.display_order, member.is_featured]);
}
console.log('â
Sample team members inserted');
// Insert sample clients
const clients = [
{
company_name: 'PT Teknologi Maju',
industry_en: 'Technology',
industry_id: 'Teknologi',
project_title_en: 'Digital Transformation Initiative',
project_title_id: 'Inisiatif Transformasi Digital',
project_description_en: 'Led comprehensive digital transformation and market expansion strategy for leading Indonesian fintech company.',
project_description_id: 'Memimpin transformasi digital komprehensif dan strategi ekspansi pasar untuk perusahaan fintech terkemuka Indonesia.',
project_value: 50000000,
project_year: 2023,
project_status: 'completed',
display_order: 1,
is_featured: true
},
{
company_name: 'CV Sumber Rejeki',
industry_en: 'Consumer Goods',
industry_id: 'Barang Konsumen',
project_title_en: 'Market Expansion & Growth Capital',
project_title_id: 'Ekspansi Pasar & Modal Pertumbuhan',
project_description_en: 'Provided growth capital and strategic guidance for rapid expansion across Indonesian archipelago.',
project_description_id: 'Menyediakan modal pertumbuhan dan bimbingan strategis untuk ekspansi cepat di seluruh nusantara Indonesia.',
project_value: 25000000,
project_year: 2022,
project_status: 'completed',
display_order: 2,
is_featured: true
},
{
company_name: 'PT Sejahtera Healthcare',
industry_en: 'Healthcare',
industry_id: 'Kesehatan',
project_title_en: 'Healthcare Infrastructure Development',
project_title_id: 'Pengembangan Infrastruktur Kesehatan',
project_description_en: 'Supported the development of modern healthcare facilities and telemedicine capabilities.',
project_description_id: 'Mendukung pengembangan fasilitas kesehatan modern dan kemampuan telemedicine.',
project_value: 75000000,
project_year: 2023,
project_status: 'ongoing',
display_order: 3,
is_featured: true
}
];
for (const client of clients) {
await db.query(`
INSERT INTO clients (company_name, industry_en, industry_id, project_title_en, project_title_id,
project_description_en, project_description_id, project_value, project_year,
project_status, display_order, is_featured)
VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10, $11, $12)
ON CONFLICT DO NOTHING
`, [client.company_name, client.industry_en, client.industry_id, client.project_title_en,
client.project_title_id, client.project_description_en, client.project_description_id,
client.project_value, client.project_year, client.project_status, client.display_order, client.is_featured]);
}
console.log('â
Sample clients inserted');
console.log('đ Database seeding completed successfully!');
} catch (error) {
console.error('â Seeding failed:', error);
process.exit(1);
}
}
// Run if called directly
if (require.main === module) {
seedDatabase()
.then(() => process.exit(0))
.catch(err => {
console.error(err);
process.exit(1);
});
}
module.exports = { seedDatabase };