@bodheesh/create-bodhi-node-app
Version:
Create a production-ready Node.js REST API with zero configuration
74 lines (62 loc) • 2.4 kB
JavaScript
const fs = require('fs').promises;
const path = require('path');
const { generateMongoDBAPI } = require('./mongodb');
const { generatePostgresAPI } = require('./postgres');
const { generateFirebaseAPI } = require('./firebase');
const { generateGraphQLAPI } = require('./graphql');
const { generateValidationMiddleware } = require('./middleware/validationMiddleware');
const { generateSecurityMiddleware } = require('./middleware/securityMiddleware');
const { generateRBACMiddleware } = require('./middleware/rbacMiddleware');
const { generateMigrations } = require('./migrations/migrationGenerator');
async function generateAPI({ schema, database, type, outputDir }) {
try {
// Create output directory if it doesn't exist
if (!fs.existsSync(outputDir)) {
await fs.mkdir(outputDir, { recursive: true });
}
// Generate base structure
await generateBaseStructure(outputDir);
// Generate security middleware
await generateSecurityMiddleware(outputDir);
// Generate validation middleware
const validationMiddleware = generateValidationMiddleware(schema);
fs.writeFileSync(
path.join(outputDir, 'middleware', 'validation.js'),
validationMiddleware
);
// Generate RBAC configuration
const rbacMiddleware = await generateRBACMiddleware(
path.join(outputDir, 'config', 'rbac_model.conf'),
path.join(outputDir, 'config', 'rbac_policy.csv')
);
// Copy environment template
fs.copyFileSync(
path.join(__dirname, '../templates/env.template'),
path.join(outputDir, '.env.example')
);
// Generate database migrations
if (database === 'postgres') {
await generateMigrations(schema, outputDir, {
dialect: 'postgres',
username: 'postgres',
password: 'postgres',
database: 'postgres',
host: 'localhost'
});
}
// Generate models, controllers, and routes
await generateModels(schema, database, outputDir);
await generateControllers(schema, type, outputDir);
await generateRoutes(schema, type, outputDir);
console.log('✅ API generation completed successfully!');
} catch (error) {
console.error('❌ Error generating API:', error);
throw error;
}
}
async function generateSwaggerDocs(schema, outputDir) {
// TODO: Implement Swagger documentation generation
}
module.exports = {
generateAPI
};