From d0cde07a1f7b60181a9c215ad9db3d6b7886ed5c Mon Sep 17 00:00:00 2001 From: Kavehhn174 Date: Wed, 12 Aug 2026 06:29:05 +0330 Subject: [PATCH] feat: add /api/seed endpoint and refactor seed.js --- app.js | 16 ++++++++++++++++ seed.js | 39 ++++++++++++++++++++++++++++++++------- 2 files changed, 48 insertions(+), 7 deletions(-) diff --git a/app.js b/app.js index 4d21af9..0812b65 100644 --- a/app.js +++ b/app.js @@ -77,6 +77,22 @@ app.get('/api/health', (req, res) => { }); }); +const seedDatabase = require('./seed'); +const { successResponse, errorResponse } = require('./utils/apiResponse'); + +const handleSeedRequest = async (req, res) => { + try { + const result = await seedDatabase({ disconnectOnComplete: false }); + return successResponse(res, 200, 'Database seeded successfully', result); + } catch (error) { + return errorResponse(res, 500, 'SEED_FAILED', error.message); + } +}; + +app.post('/api/seed', handleSeedRequest); +app.get('/api/seed', handleSeedRequest); + + app.use('/api/auth', authRoutes); app.use('/api/users', userRoutes); app.use('/api/professors', professorRoutes); diff --git a/seed.js b/seed.js index 794e083..eba950a 100644 --- a/seed.js +++ b/seed.js @@ -91,11 +91,16 @@ const defaultRoles = [ } ]; -const seedDatabase = async () => { +const seedDatabase = async ({ disconnectOnComplete = false } = {}) => { try { - console.log('Connecting to MongoDB...'); - await mongoose.connect(config.MONGO_URI); - console.log('Connected to MongoDB successfully.'); + if (mongoose.connection.readyState !== 1) { + console.log('Connecting to MongoDB...'); + await mongoose.connect(config.MONGO_URI); + console.log('Connected to MongoDB successfully.'); + } + + let rolesCreatedCount = 0; + let rolesUpdatedCount = 0; for (const roleDef of defaultRoles) { const existing = await Role.findOne({ name: roleDef.name }); @@ -104,13 +109,16 @@ const seedDatabase = async () => { existing.permissions = roleDef.permissions; existing.isSystem = roleDef.isSystem; await existing.save(); + rolesUpdatedCount++; console.log(`Updated existing role: ${roleDef.name}`); } else { await Role.create(roleDef); + rolesCreatedCount++; console.log(`Created new role: ${roleDef.name}`); } } + let superAdminStatus = 'unchanged'; // Ensure SuperAdmin user exists const superAdminRole = await Role.findOne({ name: 'SuperAdmin' }); if (superAdminRole) { @@ -128,17 +136,34 @@ const seedDatabase = async () => { role: superAdminRole._id, isActive: true }); + superAdminStatus = 'created'; console.log(`SuperAdmin user created (${config.SUPERADMIN_USERNAME}).`); + } else { + superAdminStatus = 'already_exists'; } } console.log('Database seeding completed successfully.'); + return { + success: true, + rolesCreatedCount, + rolesUpdatedCount, + superAdminStatus, + superAdminUsername: config.SUPERADMIN_USERNAME + }; } catch (error) { console.error('Database seeding failed:', error); + throw error; } finally { - await mongoose.disconnect(); - console.log('Disconnected from MongoDB.'); + if (disconnectOnComplete) { + await mongoose.disconnect(); + console.log('Disconnected from MongoDB.'); + } } }; -seedDatabase(); +if (require.main === module) { + seedDatabase({ disconnectOnComplete: true }); +} + +module.exports = seedDatabase;