codenuk_backend_mine/services/template-manager/src/seeders/seed.js
2025-09-02 13:59:36 +05:30

409 lines
13 KiB
JavaScript

require('dotenv').config();
const database = require('../config/database');
const { v4: uuidv4 } = require('uuid');
// Template data from your current project.types.js
const TEMPLATE_DATA = {
'Business & Enterprise': [
{
type: 'healthcare',
title: 'Healthcare Platform',
description: 'Patient management, appointments, medical records, telehealth',
icon: '🏥',
gradient: 'from-blue-50 to-blue-100',
border: 'border-blue-200',
text: 'text-blue-900',
subtext: 'text-blue-700',
features: [
{
feature_id: 'user_auth',
name: 'User Authentication',
description: 'Secure login and registration for caregivers and admins',
feature_type: 'essential',
complexity: 'medium',
display_order: 1
},
{
feature_id: 'patient_management',
name: 'Patient Management',
description: 'Create, edit, and manage patient profiles with medical history',
feature_type: 'essential',
complexity: 'high',
display_order: 2
},
{
feature_id: 'appointment_scheduling',
name: 'Appointment Scheduling',
description: 'Schedule and manage patient appointments',
feature_type: 'essential',
complexity: 'medium',
display_order: 3
},
{
feature_id: 'call_scheduling',
name: 'Automated Call Scheduling',
description: 'Schedule automated calls to patients via Retell AI',
feature_type: 'suggested',
complexity: 'high',
display_order: 4
},
{
feature_id: 'admin_dashboard',
name: 'Admin Dashboard',
description: 'Analytics and usage tracking for administrators',
feature_type: 'suggested',
complexity: 'medium',
display_order: 5
}
]
},
{
type: 'ecommerce',
title: 'E-commerce Platform',
description: 'Online store, payments, inventory, customer management',
icon: '🛒',
gradient: 'from-green-50 to-green-100',
border: 'border-green-200',
text: 'text-green-900',
subtext: 'text-green-700',
features: [
{
feature_id: 'user_auth',
name: 'User Authentication',
description: 'Customer registration and login system',
feature_type: 'essential',
complexity: 'medium',
display_order: 1
},
{
feature_id: 'product_catalog',
name: 'Product Catalog',
description: 'Browse and search products with categories',
feature_type: 'essential',
complexity: 'medium',
display_order: 2
},
{
feature_id: 'shopping_cart',
name: 'Shopping Cart',
description: 'Add products to cart and manage quantities',
feature_type: 'essential',
complexity: 'medium',
display_order: 3
},
{
feature_id: 'payment_processing',
name: 'Payment Processing',
description: 'Secure payment integration with Stripe/PayPal',
feature_type: 'essential',
complexity: 'high',
display_order: 4
},
{
feature_id: 'inventory_management',
name: 'Inventory Management',
description: 'Track stock levels and manage inventory',
feature_type: 'suggested',
complexity: 'high',
display_order: 5
}
]
},
{
type: 'business_crm',
title: 'CRM System',
description: 'Customer relationship management, sales pipeline, lead tracking',
icon: '👥',
gradient: 'from-purple-50 to-purple-100',
border: 'border-purple-200',
text: 'text-purple-900',
subtext: 'text-purple-700',
features: [
{
feature_id: 'lead_management',
name: 'Lead Management',
description: 'Capture, track and manage sales leads',
feature_type: 'essential',
complexity: 'medium',
display_order: 1
},
{
feature_id: 'sales_pipeline',
name: 'Sales Pipeline',
description: 'Visual sales pipeline with drag-and-drop functionality',
feature_type: 'essential',
complexity: 'high',
display_order: 2
},
{
feature_id: 'customer_analytics',
name: 'Customer Analytics',
description: 'Detailed analytics and reporting on customer behavior',
feature_type: 'suggested',
complexity: 'medium',
display_order: 3
},
{
feature_id: 'communication_tools',
name: 'Communication Tools',
description: 'Email integration and communication tracking',
feature_type: 'suggested',
complexity: 'medium',
display_order: 4
}
]
}
],
'Technology & Analytics': [
{
type: 'analytics_dashboard',
title: 'Analytics Dashboard',
description: 'Data visualization, business intelligence, custom reports',
icon: '📊',
gradient: 'from-blue-50 to-blue-100',
border: 'border-blue-200',
text: 'text-blue-900',
subtext: 'text-blue-700',
features: [
{
feature_id: 'data_visualization',
name: 'Data Visualization',
description: 'Interactive charts and graphs',
feature_type: 'essential',
complexity: 'high',
display_order: 1
},
{
feature_id: 'custom_reports',
name: 'Custom Reports',
description: 'Generate and schedule custom reports',
feature_type: 'essential',
complexity: 'medium',
display_order: 2
}
]
},
{
type: 'ai_chatbot_platform',
title: 'AI Chatbot Platform',
description: 'Deploy multi-channel AI chatbots with analytics and workflows',
icon: '🤖',
gradient: 'from-teal-50 to-teal-100',
border: 'border-teal-200',
text: 'text-teal-900',
subtext: 'text-teal-700',
features: [
{
feature_id: 'nlp_engine',
name: 'NLP Engine',
description: 'Natural language processing for intent and entity extraction',
feature_type: 'essential',
complexity: 'high',
display_order: 1
},
{
feature_id: 'channel_integrations',
name: 'Channel Integrations',
description: 'Integrate with web, WhatsApp, and Slack',
feature_type: 'essential',
complexity: 'medium',
display_order: 2
},
{
feature_id: 'conversation_analytics',
name: 'Conversation Analytics',
description: 'Track KPIs: containment rate, CSAT, and response time',
feature_type: 'suggested',
complexity: 'medium',
display_order: 3
}
]
}
],
'Custom & Others': [
{
type: 'custom_project',
title: 'Custom Project',
description: 'Describe your unique project requirements and let AI help design it',
icon: '🎨',
gradient: 'from-gray-50 to-gray-100',
border: 'border-gray-200',
text: 'text-gray-900',
subtext: 'text-gray-700',
features: []
},
{
type: 'project_management_tool',
title: 'Project Management Tool',
description: 'Tasks, Kanban boards, sprints, and team collaboration',
icon: '🗂️',
gradient: 'from-amber-50 to-amber-100',
border: 'border-amber-200',
text: 'text-amber-900',
subtext: 'text-amber-700',
features: [
{
feature_id: 'kanban_boards',
name: 'Kanban Boards',
description: 'Organize tasks into customizable columns',
feature_type: 'essential',
complexity: 'medium',
display_order: 1
},
{
feature_id: 'sprint_planning',
name: 'Sprint Planning',
description: 'Plan sprints, track velocity, and manage backlogs',
feature_type: 'essential',
complexity: 'high',
display_order: 2
},
{
feature_id: 'collaboration_tools',
name: 'Collaboration Tools',
description: 'Comments, mentions, and notifications',
feature_type: 'suggested',
complexity: 'medium',
display_order: 3
}
]
}
]
};
async function seedDatabase() {
console.log('🌱 Starting Template Manager database seeding...');
const client = await database.getClient();
try {
await client.query('BEGIN');
// Clear existing data
console.log('🧹 Clearing existing template data...');
await client.query('DELETE FROM feature_usage');
await client.query('DELETE FROM custom_features');
await client.query('DELETE FROM template_features');
await client.query('DELETE FROM templates WHERE type != \'_migration_test\'');
let totalTemplates = 0;
let totalFeatures = 0;
// Seed templates by category
for (const [category, templates] of Object.entries(TEMPLATE_DATA)) {
console.log(`📂 Seeding category: ${category}`);
for (const templateData of templates) {
// Insert template
const templateId = uuidv4();
const templateQuery = `
INSERT INTO templates (
id, type, title, description, icon, category,
gradient, border, text, subtext
) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9, $10)
`;
await client.query(templateQuery, [
templateId,
templateData.type,
templateData.title,
templateData.description,
templateData.icon,
category,
templateData.gradient,
templateData.border,
templateData.text,
templateData.subtext
]);
totalTemplates++;
console.log(` ✅ Template: ${templateData.title}`);
// Insert features for this template
for (const featureData of templateData.features) {
const featureId = uuidv4();
const featureQuery = `
INSERT INTO template_features (
id, template_id, feature_id, name, description,
feature_type, complexity, display_order, is_default
) VALUES ($1, $2, $3, $4, $5, $6, $7, $8, $9)
`;
await client.query(featureQuery, [
featureId,
templateId,
featureData.feature_id,
featureData.name,
featureData.description,
featureData.feature_type,
featureData.complexity,
featureData.display_order,
true // is_default
]);
totalFeatures++;
console.log(` 🎯 Feature: ${featureData.name} (${featureData.feature_type})`);
}
}
}
// Add some sample usage data for demonstration
console.log('📊 Adding sample usage data...');
const sampleUsageQuery = `
INSERT INTO feature_usage (template_id, feature_id, user_session, project_id)
SELECT
t.id,
tf.id,
'demo_session_' || (RANDOM() * 100)::int,
'demo_project_' || (RANDOM() * 50)::int
FROM templates t
JOIN template_features tf ON t.id = tf.template_id
WHERE RANDOM() < 0.3 -- 30% of features get sample usage
`;
const usageResult = await client.query(sampleUsageQuery);
// Update usage counts based on sample data
const updateUsageQuery = `
UPDATE template_features
SET usage_count = (
SELECT COUNT(*)
FROM feature_usage
WHERE feature_id = template_features.id
)
`;
await client.query(updateUsageQuery);
await client.query('COMMIT');
console.log('✅ Database seeding completed successfully!');
console.log(`📊 Summary:`);
console.log(` - Templates created: ${totalTemplates}`);
console.log(` - Features created: ${totalFeatures}`);
console.log(` - Sample usage records: ${usageResult.rowCount}`);
console.log(` - Categories: ${Object.keys(TEMPLATE_DATA).length}`);
} catch (error) {
await client.query('ROLLBACK');
console.error('❌ Database seeding failed:', error.message);
throw error;
} finally {
client.release();
}
}
// Run seeder if called directly
if (require.main === module) {
seedDatabase()
.then(() => {
console.log('🎉 Seeding process completed!');
process.exit(0);
})
.catch((error) => {
console.error('💥 Seeding process failed:', error.message);
process.exit(1);
});
}
module.exports = { seedDatabase };