feat: add /api/seed endpoint and refactor seed.js

This commit is contained in:
2026-08-12 06:29:05 +03:30
parent d28e71c3fa
commit d0cde07a1f
2 changed files with 48 additions and 7 deletions
+16
View File
@@ -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);
+32 -7
View File
@@ -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;