This commit is contained in:
144
update-grade-code-format.js
Normal file
144
update-grade-code-format.js
Normal file
@@ -0,0 +1,144 @@
|
||||
/**
|
||||
* Update grade code format in all JSON files
|
||||
* Old format: GUUL (4 digits) - e.g., 1011 = Grade 1, Unit 01, Lesson 1
|
||||
* New format: GGUULL (6 digits) - e.g., 010101 = Grade 01, Unit 01, Lesson 01
|
||||
*/
|
||||
|
||||
const fs = require('fs');
|
||||
const path = require('path');
|
||||
|
||||
// Configuration
|
||||
const DATA_DIR = path.join(__dirname, 'data');
|
||||
const DRY_RUN = false; // Set to true to preview changes without updating files
|
||||
|
||||
function convertGradeCode(oldCode) {
|
||||
const codeStr = oldCode.toString();
|
||||
|
||||
if (codeStr.length === 4) {
|
||||
// Format: GUUL -> GGUULL
|
||||
const grade = codeStr[0]; // G
|
||||
const unit = codeStr.substring(1, 3); // UU
|
||||
const lesson = codeStr[3]; // L
|
||||
|
||||
return `0${grade}${unit}0${lesson}`;
|
||||
} else if (codeStr.length === 3) {
|
||||
// Format: GUL -> GGUULL
|
||||
const grade = codeStr[0]; // G
|
||||
const unit = codeStr[1]; // U
|
||||
const lesson = codeStr[2]; // L
|
||||
|
||||
return `0${grade}0${unit}0${lesson}`;
|
||||
} else if (codeStr.length === 6) {
|
||||
// Already in new format
|
||||
return codeStr;
|
||||
}
|
||||
|
||||
// Unknown format, return as is
|
||||
console.log(` ⚠️ Unknown format: ${codeStr}`);
|
||||
return codeStr;
|
||||
}
|
||||
|
||||
function processJsonFile(filePath) {
|
||||
try {
|
||||
const data = JSON.parse(fs.readFileSync(filePath, 'utf8'));
|
||||
|
||||
if (!Array.isArray(data)) {
|
||||
return { updated: 0, changes: [] };
|
||||
}
|
||||
|
||||
let updated = 0;
|
||||
const changes = [];
|
||||
|
||||
// Update grade codes
|
||||
data.forEach(entry => {
|
||||
if (entry.grade) {
|
||||
const oldGrade = entry.grade;
|
||||
const newGrade = convertGradeCode(oldGrade);
|
||||
|
||||
if (oldGrade !== newGrade) {
|
||||
changes.push({ old: oldGrade, new: newGrade });
|
||||
entry.grade = newGrade;
|
||||
updated++;
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
// Write updated data back to file
|
||||
if (!DRY_RUN && updated > 0) {
|
||||
fs.writeFileSync(filePath, JSON.stringify(data, null, 2), 'utf8');
|
||||
}
|
||||
|
||||
return { updated, changes };
|
||||
} catch (error) {
|
||||
console.error(` ❌ Error processing ${filePath}: ${error.message}`);
|
||||
return { updated: 0, changes: [] };
|
||||
}
|
||||
}
|
||||
|
||||
function processDirectory(dir) {
|
||||
const entries = fs.readdirSync(dir, { withFileTypes: true });
|
||||
let totalUpdated = 0;
|
||||
const allChanges = [];
|
||||
|
||||
for (const entry of entries) {
|
||||
const fullPath = path.join(dir, entry.name);
|
||||
|
||||
if (entry.isDirectory()) {
|
||||
const result = processDirectory(fullPath);
|
||||
totalUpdated += result.updated;
|
||||
allChanges.push(...result.changes);
|
||||
} else if (entry.isFile() && entry.name.endsWith('.json')) {
|
||||
console.log(` 📄 Processing ${entry.name}...`);
|
||||
const { updated, changes } = processJsonFile(fullPath);
|
||||
|
||||
if (updated > 0) {
|
||||
console.log(` ✅ Updated ${updated} grade codes`);
|
||||
changes.forEach(c => {
|
||||
console.log(` ${c.old} → ${c.new}`);
|
||||
});
|
||||
totalUpdated += updated;
|
||||
allChanges.push(...changes);
|
||||
} else {
|
||||
console.log(` ⏭️ No changes needed`);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
return { updated: totalUpdated, changes: allChanges };
|
||||
}
|
||||
|
||||
async function main() {
|
||||
try {
|
||||
console.log('🔄 Starting grade code format update...\n');
|
||||
|
||||
if (DRY_RUN) {
|
||||
console.log('⚠️ DRY RUN MODE - No files will be modified\n');
|
||||
}
|
||||
|
||||
// Check if data directory exists
|
||||
if (!fs.existsSync(DATA_DIR)) {
|
||||
console.error('❌ Data directory not found:', DATA_DIR);
|
||||
process.exit(1);
|
||||
}
|
||||
|
||||
// Process all JSON files in data directory
|
||||
console.log('📂 Processing JSON files...\n');
|
||||
const { updated, changes } = processDirectory(DATA_DIR);
|
||||
|
||||
console.log('\n✅ Processing complete!');
|
||||
console.log(`📊 Total grade codes updated: ${updated}`);
|
||||
|
||||
if (DRY_RUN) {
|
||||
console.log('\n⚠️ This was a DRY RUN. Set DRY_RUN = false to apply changes.');
|
||||
}
|
||||
|
||||
process.exit(0);
|
||||
} catch (error) {
|
||||
console.error('❌ Error:', error.message);
|
||||
console.error(error.stack);
|
||||
process.exit(1);
|
||||
}
|
||||
}
|
||||
|
||||
// Run the script
|
||||
main();
|
||||
Reference in New Issue
Block a user