197 lines
4.8 KiB
JavaScript
197 lines
4.8 KiB
JavaScript
const mongoose = require('mongoose');
|
|
const logger = require('../utils/logger');
|
|
const Player = require('../models/Player');
|
|
const Ship = require('../models/Ship');
|
|
const Inventory = require('../models/Inventory');
|
|
require('dotenv').config();
|
|
|
|
async function seed() {
|
|
try {
|
|
logger.info('Starting database seeding...');
|
|
|
|
// Connect to database
|
|
await mongoose.connect(process.env.MONGODB_URI || 'mongodb://localhost:27017/galaxystrikeonline');
|
|
|
|
logger.info('Connected to database');
|
|
|
|
// Clear existing data (optional - remove if you want to preserve data)
|
|
logger.info('Clearing existing data...');
|
|
await Player.deleteMany({});
|
|
await Ship.deleteMany({});
|
|
await Inventory.deleteMany({});
|
|
|
|
// Create a test user
|
|
const testUser = new Player({
|
|
userId: 'test_user_001',
|
|
username: 'TestPlayer',
|
|
email: 'test@example.com',
|
|
password: '$2a$10$example_hashed_password_here',
|
|
stats: {
|
|
level: 1,
|
|
experience: 0,
|
|
credits: 5000,
|
|
dungeonsCleared: 0,
|
|
playTime: 0,
|
|
lastLogin: new Date()
|
|
},
|
|
attributes: {
|
|
health: 100,
|
|
maxHealth: 100,
|
|
energy: 100,
|
|
maxEnergy: 100,
|
|
attack: 10,
|
|
defense: 5,
|
|
speed: 10,
|
|
criticalChance: 0.05,
|
|
criticalDamage: 1.5
|
|
},
|
|
info: {
|
|
name: 'Commander',
|
|
title: 'Rookie Pilot',
|
|
guild: null,
|
|
rank: 'Cadet'
|
|
},
|
|
settings: {
|
|
autoSave: true,
|
|
notifications: true,
|
|
soundEffects: true,
|
|
music: false,
|
|
discordIntegration: false
|
|
},
|
|
dailyRewards: {
|
|
lastClaim: null,
|
|
consecutiveDays: 0
|
|
}
|
|
});
|
|
|
|
await testUser.save();
|
|
logger.info('Created test user');
|
|
|
|
// Create starter ship for test user
|
|
const starterShip = new Ship({
|
|
userId: testUser.userId,
|
|
id: 'starter_cruiser_001',
|
|
name: 'Starter Cruiser',
|
|
class: 'Cruiser',
|
|
level: 1,
|
|
stats: {
|
|
health: 100,
|
|
maxHealth: 100,
|
|
attack: 15,
|
|
defense: 12,
|
|
speed: 10,
|
|
criticalChance: 0.05,
|
|
criticalDamage: 1.5,
|
|
hull: 100
|
|
},
|
|
texture: 'assets/textures/ships/starter_cruiser.png',
|
|
experience: 0,
|
|
requiredExp: 100,
|
|
upgrades: [],
|
|
isEquipped: true,
|
|
isCurrent: true,
|
|
price: 5000,
|
|
rarity: 'common',
|
|
description: 'Reliable starter cruiser for new pilots',
|
|
acquiredAt: new Date(),
|
|
lastUsed: new Date()
|
|
});
|
|
|
|
await starterShip.save();
|
|
logger.info('Created starter ship');
|
|
|
|
// Update player with current ship
|
|
testUser.currentShip = starterShip._id;
|
|
await testUser.save();
|
|
|
|
// Create inventory for test user
|
|
const inventory = new Inventory({
|
|
userId: testUser.userId,
|
|
maxSlots: 50,
|
|
items: [
|
|
{
|
|
id: 'starter_blaster_common',
|
|
name: 'Common Blaster',
|
|
type: 'weapon',
|
|
rarity: 'common',
|
|
quantity: 1,
|
|
stats: {
|
|
attack: 5,
|
|
criticalChance: 0.02,
|
|
damage: 10,
|
|
fireRate: 2,
|
|
range: 5,
|
|
energy: 5
|
|
},
|
|
description: 'A reliable basic blaster for new pilots',
|
|
equipable: true,
|
|
slot: 'weapon',
|
|
isEquipped: false,
|
|
stackable: false,
|
|
acquiredAt: new Date()
|
|
},
|
|
{
|
|
id: 'basic_armor_common',
|
|
name: 'Basic Armor',
|
|
type: 'armor',
|
|
rarity: 'common',
|
|
quantity: 1,
|
|
stats: {
|
|
defense: 3,
|
|
durability: 20,
|
|
weight: 2,
|
|
energyShield: 0
|
|
},
|
|
description: 'Light armor providing basic protection',
|
|
equipable: true,
|
|
slot: 'armor',
|
|
isEquipped: false,
|
|
stackable: false,
|
|
acquiredAt: new Date()
|
|
},
|
|
{
|
|
id: 'health_kit',
|
|
name: 'Health Kit',
|
|
type: 'consumable',
|
|
rarity: 'common',
|
|
quantity: 3,
|
|
stats: {},
|
|
description: 'A medical kit that restores health',
|
|
consumable: true,
|
|
effect: {
|
|
health: 50
|
|
},
|
|
stackable: true,
|
|
acquiredAt: new Date()
|
|
}
|
|
],
|
|
equippedItems: {
|
|
weapon: null,
|
|
armor: null,
|
|
engine: null,
|
|
shield: null,
|
|
special: null
|
|
}
|
|
});
|
|
|
|
await inventory.save();
|
|
logger.info('Created inventory with starter items');
|
|
|
|
logger.info('Database seeding completed successfully');
|
|
|
|
// Close connection
|
|
await mongoose.connection.close();
|
|
logger.info('Database connection closed');
|
|
|
|
} catch (error) {
|
|
logger.error('Seeding failed:', error);
|
|
process.exit(1);
|
|
}
|
|
}
|
|
|
|
if (require.main === module) {
|
|
seed();
|
|
}
|
|
|
|
module.exports = seed;
|