Fix v1.1.0: Analytics, Sessions, and Error Handling Improvements
This commit is contained in:
1 parent
7d8470df84
commit
545cf4c8dc
200 files changed
+91013
-18521
No files matched your search
+110
@@ -0,0 +1,110 @@
|
||||
//Debug entry script to ensure the data directory and users exist
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
// Define directories
|
||||
const DATA_DIR = path.join(__dirname, 'data');
|
||||
const SEED_DIR = path.join(__dirname, 'seed');
|
||||
|
||||
// Define files
|
||||
const files = {
|
||||
users: 'users.json',
|
||||
wordlists: 'wordlists.json',
|
||||
results: 'results.json',
|
||||
badges: 'badges.json',
|
||||
leaderboards: 'leaderboards.json',
|
||||
challenges: 'challenges.json',
|
||||
progress: 'progress.json',
|
||||
spacedRepetition: 'spacedRepetition.json'
|
||||
};
|
||||
|
||||
console.log('🔍 DEBUG: Starting debug script');
|
||||
console.log(`📁 DATA_DIR: ${DATA_DIR}`);
|
||||
console.log(`📁 SEED_DIR: ${SEED_DIR}`);
|
||||
|
||||
// Ensure data directory exists
|
||||
if (!fs.existsSync(DATA_DIR)) {
|
||||
console.log(`📁 Creating data directory: ${DATA_DIR}`);
|
||||
fs.mkdirSync(DATA_DIR);
|
||||
}
|
||||
|
||||
// Helper function to read JSON safely
|
||||
function readJsonSafe(filePath, fallback = {}) {
|
||||
try {
|
||||
return JSON.parse(fs.readFileSync(filePath, 'utf-8'));
|
||||
} catch (error) {
|
||||
console.error(`⚠️ Error reading ${filePath}: ${error.message}`);
|
||||
return fallback;
|
||||
}
|
||||
}
|
||||
|
||||
// Ensure all data files exist, using seeds if available
|
||||
Object.entries(files).forEach(([key, filename]) => {
|
||||
const targetPath = path.join(DATA_DIR, filename);
|
||||
const seedPath = path.join(SEED_DIR, filename);
|
||||
|
||||
console.log(`🔍 Checking ${filename}...`);
|
||||
|
||||
if (!fs.existsSync(targetPath) || fs.readFileSync(targetPath, 'utf-8').trim() === '') {
|
||||
console.log(`⚠️ ${filename} is missing or empty`);
|
||||
|
||||
if (fs.existsSync(seedPath)) {
|
||||
console.log(`🌱 Using seed from ${seedPath}`);
|
||||
fs.copyFileSync(seedPath, targetPath);
|
||||
console.log(`✅ Created ${filename} from seed`);
|
||||
} else {
|
||||
console.log(`⚠️ No seed found for ${filename}`);
|
||||
|
||||
// Create default structure for each file
|
||||
if (filename === 'users.json') {
|
||||
console.log(`👥 Creating default users`);
|
||||
const defaultUsers = [
|
||||
{
|
||||
"username": "admin1",
|
||||
"hash": "5e884898da28047151d0e56f8dc6292773603d0d6aabbdd62a11ef721d1542d8", // password
|
||||
"role": "admin"
|
||||
},
|
||||
{
|
||||
"username": "nate",
|
||||
"hash": "5a2a558c78d3717db731600c4f354fa1d9c84b556f108091a891f444f1bdec40", // nate123
|
||||
"role": "student"
|
||||
},
|
||||
{
|
||||
"username": "student1",
|
||||
"hash": "8d969eef6ecad3c29a3a629280e686cf0c3f5d5a86aff3ca12020c923adc6c92", // 123456
|
||||
"role": "student"
|
||||
}
|
||||
];
|
||||
fs.writeFileSync(targetPath, JSON.stringify(defaultUsers, null, 2));
|
||||
console.log(`✅ Created ${filename} with default users`);
|
||||
} else {
|
||||
// For other files, create empty structure
|
||||
fs.writeFileSync(targetPath, JSON.stringify({}), 'utf-8');
|
||||
console.log(`✅ Created empty ${filename}`);
|
||||
}
|
||||
}
|
||||
} else {
|
||||
// Validate JSON format
|
||||
try {
|
||||
const content = fs.readFileSync(targetPath, 'utf-8');
|
||||
JSON.parse(content);
|
||||
console.log(`✅ ${filename} exists and is valid JSON`);
|
||||
} catch (error) {
|
||||
console.error(`🔴 ERROR: ${filename} contains invalid JSON: ${error.message}`);
|
||||
console.log(`🔄 Attempting to fix or replace ${filename}`);
|
||||
|
||||
if (fs.existsSync(seedPath)) {
|
||||
fs.copyFileSync(seedPath, targetPath);
|
||||
console.log(`🛠️ Replaced with seed copy`);
|
||||
} else {
|
||||
fs.writeFileSync(targetPath, JSON.stringify({}), 'utf-8');
|
||||
console.log(`🛠️ Replaced with empty JSON object`);
|
||||
}
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Start the server
|
||||
console.log('🚀 Starting server...');
|
||||
require('./server.js');
|
||||
Reference in new issue
Block a user