/** * Update vocabulary context entries * This script allows you to modify vocabulary records in Context table * You can: * - Update specific vocab words * - Bulk update by grade * - Update fields like title, context, knowledge, desc * - Delete vocab entries */ const { sequelize } = require('./config/database'); const { Context } = require('./models'); // ============================================ // CONFIGURATION: Customize your updates here // ============================================ const UPDATE_MODE = 'single'; // Options: 'single', 'bulk_by_grade', 'delete' // FOR SINGLE WORD UPDATE const SINGLE_UPDATE = { oldTitle: 'dad', // Current title to search for grade: 101, // Grade to search in updates: { title: 'dad', // New title (if you want to change it) context: 'Family member - father', // Updated context knowledge: 'Common family vocabulary for beginners', desc: 'Tα»« chỉ bα»‘/cha trong tiαΊΏng Anh' } }; // FOR BULK UPDATE BY GRADE const BULK_UPDATE = { grade: 101, // Which grade to update updates: { context: 'Grade 1 Unit 1 Lesson 1 vocabulary', knowledge: 'Basic greeting and family vocabulary' } }; // FOR DELETION const DELETE_CONFIG = { title: 'test_word', // Word to delete grade: 101 // Grade to delete from }; // ============================================ // MAIN FUNCTIONS // ============================================ async function updateSingleVocab() { const { oldTitle, grade, updates } = SINGLE_UPDATE; console.log(`πŸ” Looking for vocab: "${oldTitle}" in grade ${grade}...`); const vocab = await Context.findOne({ where: { title: oldTitle, grade: grade, type: 'vocabulary' } }); if (!vocab) { console.log('❌ Vocab not found!'); return 0; } console.log(`βœ… Found vocab: ${vocab.title}`); console.log(`πŸ“ Updating...`); await vocab.update(updates); console.log(`βœ… Updated successfully!`); console.log(`New data:`, { title: vocab.title, grade: vocab.grade, context: vocab.context, knowledge: vocab.knowledge, desc: vocab.desc }); return 1; } async function bulkUpdateByGrade() { const { grade, updates } = BULK_UPDATE; console.log(`πŸ” Looking for all vocab in grade ${grade}...`); const vocabs = await Context.findAll({ where: { grade: grade, type: 'vocabulary' } }); console.log(`βœ… Found ${vocabs.length} vocab words`); console.log(`πŸ“ Updating...`); for (const vocab of vocabs) { await vocab.update(updates); } console.log(`βœ… Updated ${vocabs.length} vocab words successfully!`); return vocabs.length; } async function deleteVocab() { const { title, grade } = DELETE_CONFIG; console.log(`πŸ” Looking for vocab: "${title}" in grade ${grade}...`); const result = await Context.destroy({ where: { title: title, grade: grade, type: 'vocabulary' } }); if (result === 0) { console.log('❌ Vocab not found or already deleted!'); } else { console.log(`βœ… Deleted ${result} vocab entry!`); } return result; } async function listVocabByGrade(grade) { console.log(`\nπŸ“š Listing all vocab in grade ${grade}...`); const vocabs = await Context.findAll({ where: { grade: grade, type: 'vocabulary' }, order: [['title', 'ASC']] }); console.log(`\nβœ… Found ${vocabs.length} vocab words:\n`); vocabs.forEach((v, idx) => { console.log(`${idx + 1}. ${v.title}`); if (v.context) console.log(` Context: ${v.context}`); if (v.knowledge) console.log(` Knowledge: ${v.knowledge}`); if (v.desc) console.log(` Desc: ${v.desc}`); console.log(''); }); return vocabs.length; } // ============================================ // MAIN EXECUTION // ============================================ async function main() { try { console.log('πŸ”„ Starting vocab context update...\n'); await sequelize.authenticate(); console.log('βœ… Database connection OK\n'); let result = 0; switch (UPDATE_MODE) { case 'single': result = await updateSingleVocab(); break; case 'bulk_by_grade': result = await bulkUpdateByGrade(); break; case 'delete': result = await deleteVocab(); break; case 'list': // Change grade here to list different grades result = await listVocabByGrade(101); break; default: console.log('❌ Invalid UPDATE_MODE'); } console.log('\nβœ… Operation complete!'); console.log(`πŸ“Š Records affected: ${result}`); process.exit(0); } catch (error) { console.error('❌ Error during update:', error.message); console.error(error.stack); process.exit(1); } } // Run the script main();