51 lines
1.7 KiB
JavaScript
51 lines
1.7 KiB
JavaScript
const mongoose = require('mongoose');
|
|
const logger = require('../utils/logger');
|
|
require('dotenv').config();
|
|
|
|
async function migrate() {
|
|
try {
|
|
logger.info('Starting database migration...');
|
|
|
|
// Connect to database
|
|
await mongoose.connect(process.env.MONGODB_URI || 'mongodb://localhost:27017/galaxystrikeonline');
|
|
|
|
logger.info('Connected to database');
|
|
|
|
// Create indexes for performance
|
|
const db = mongoose.connection.db;
|
|
|
|
// Player indexes
|
|
await db.collection('players').createIndex({ userId: 1 }, { unique: true });
|
|
await db.collection('players').createIndex({ email: 1 }, { unique: true });
|
|
await db.collection('players').createIndex({ 'stats.level': 1 });
|
|
await db.collection('players').createIndex({ currentServer: 1 });
|
|
|
|
// Ship indexes
|
|
await db.collection('ships').createIndex({ userId: 1 });
|
|
await db.collection('ships').createIndex({ id: 1 }, { unique: true });
|
|
await db.collection('ships').createIndex({ isEquipped: 1 });
|
|
await db.collection('ships').createIndex({ isCurrent: 1 });
|
|
|
|
// Inventory indexes
|
|
await db.collection('inventories').createIndex({ userId: 1 }, { unique: true });
|
|
await db.collection('inventories').createIndex({ 'items.id': 1 });
|
|
await db.collection('inventories').createIndex({ 'items.type': 1 });
|
|
|
|
logger.info('Database migration completed successfully');
|
|
|
|
// Close connection
|
|
await mongoose.connection.close();
|
|
logger.info('Database connection closed');
|
|
|
|
} catch (error) {
|
|
logger.error('Migration failed:', error);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
if (require.main === module) {
|
|
migrate();
|
|
}
|
|
|
|
module.exports = migrate;
|