'use strict'; const { v4: uuidv4 } = require('uuid'); /** @type {import('sequelize-cli').Migration} */ module.exports = { async up(queryInterface, Sequelize) { const achievements = [ // Milestone achievements { id: uuidv4(), name: 'First Steps', slug: 'first-steps', description: 'Complete your very first quiz', category: 'milestone', icon: '🎯', points: 10, requirement_type: 'quizzes_completed', requirement_value: 1, is_active: true, display_order: 1, created_at: new Date(), updated_at: new Date() }, { id: uuidv4(), name: 'Quiz Enthusiast', slug: 'quiz-enthusiast', description: 'Complete 10 quizzes', category: 'milestone', icon: 'πŸ“š', points: 50, requirement_type: 'quizzes_completed', requirement_value: 10, is_active: true, display_order: 2, created_at: new Date(), updated_at: new Date() }, { id: uuidv4(), name: 'Quiz Master', slug: 'quiz-master', description: 'Complete 50 quizzes', category: 'milestone', icon: 'πŸ†', points: 250, requirement_type: 'quizzes_completed', requirement_value: 50, is_active: true, display_order: 3, created_at: new Date(), updated_at: new Date() }, { id: uuidv4(), name: 'Quiz Legend', slug: 'quiz-legend', description: 'Complete 100 quizzes', category: 'milestone', icon: 'πŸ‘‘', points: 500, requirement_type: 'quizzes_completed', requirement_value: 100, is_active: true, display_order: 4, created_at: new Date(), updated_at: new Date() }, // Accuracy achievements { id: uuidv4(), name: 'Perfect Score', slug: 'perfect-score', description: 'Achieve 100% on any quiz', category: 'score', icon: 'πŸ’―', points: 100, requirement_type: 'perfect_score', requirement_value: 1, is_active: true, display_order: 5, created_at: new Date(), updated_at: new Date() }, { id: uuidv4(), name: 'Perfectionist', slug: 'perfectionist', description: 'Achieve 100% on 5 quizzes', category: 'score', icon: '⭐', points: 300, requirement_type: 'perfect_score', requirement_value: 5, is_active: true, display_order: 6, created_at: new Date(), updated_at: new Date() }, { id: uuidv4(), name: 'High Achiever', slug: 'high-achiever', description: 'Maintain 80% average across all quizzes', category: 'score', icon: 'πŸŽ“', points: 200, requirement_type: 'quizzes_passed', requirement_value: 80, is_active: true, display_order: 7, created_at: new Date(), updated_at: new Date() }, // Speed achievements { id: uuidv4(), name: 'Speed Demon', slug: 'speed-demon', description: 'Complete a quiz in under 2 minutes', category: 'speed', icon: '⚑', points: 75, requirement_type: 'speed_demon', requirement_value: 120, is_active: true, display_order: 8, created_at: new Date(), updated_at: new Date() }, { id: uuidv4(), name: 'Lightning Fast', slug: 'lightning-fast', description: 'Complete 10 quizzes in under 2 minutes each', category: 'speed', icon: 'πŸš€', points: 200, requirement_type: 'speed_demon', requirement_value: 10, is_active: true, display_order: 9, created_at: new Date(), updated_at: new Date() }, // Streak achievements { id: uuidv4(), name: 'On a Roll', slug: 'on-a-roll', description: 'Maintain a 3-day streak', category: 'streak', icon: 'πŸ”₯', points: 50, requirement_type: 'streak_days', requirement_value: 3, is_active: true, display_order: 10, created_at: new Date(), updated_at: new Date() }, { id: uuidv4(), name: 'Week Warrior', slug: 'week-warrior', description: 'Maintain a 7-day streak', category: 'streak', icon: 'πŸ”₯πŸ”₯', points: 150, requirement_type: 'streak_days', requirement_value: 7, is_active: true, display_order: 11, created_at: new Date(), updated_at: new Date() }, { id: uuidv4(), name: 'Month Champion', slug: 'month-champion', description: 'Maintain a 30-day streak', category: 'streak', icon: 'πŸ”₯πŸ”₯πŸ”₯', points: 500, requirement_type: 'streak_days', requirement_value: 30, is_active: true, display_order: 12, created_at: new Date(), updated_at: new Date() }, // Exploration achievements { id: uuidv4(), name: 'Explorer', slug: 'explorer', description: 'Complete quizzes in 3 different categories', category: 'quiz', icon: 'πŸ—ΊοΈ', points: 100, requirement_type: 'category_master', requirement_value: 3, is_active: true, display_order: 13, created_at: new Date(), updated_at: new Date() }, { id: uuidv4(), name: 'Jack of All Trades', slug: 'jack-of-all-trades', description: 'Complete quizzes in 5 different categories', category: 'quiz', icon: '🌟', points: 200, requirement_type: 'category_master', requirement_value: 5, is_active: true, display_order: 14, created_at: new Date(), updated_at: new Date() }, { id: uuidv4(), name: 'Master of All', slug: 'master-of-all', description: 'Complete quizzes in all categories', category: 'quiz', icon: '🌈', points: 400, requirement_type: 'category_master', requirement_value: 7, is_active: true, display_order: 15, created_at: new Date(), updated_at: new Date() }, // Special achievements { id: uuidv4(), name: 'Early Bird', slug: 'early-bird', description: 'Complete a quiz before 8 AM', category: 'special', icon: 'πŸŒ…', points: 50, requirement_type: 'early_bird', requirement_value: 8, is_active: true, display_order: 16, created_at: new Date(), updated_at: new Date() }, { id: uuidv4(), name: 'Night Owl', slug: 'night-owl', description: 'Complete a quiz after 10 PM', category: 'special', icon: 'πŸ¦‰', points: 50, requirement_type: 'early_bird', requirement_value: 22, is_active: true, display_order: 17, created_at: new Date(), updated_at: new Date() }, { id: uuidv4(), name: 'Weekend Warrior', slug: 'weekend-warrior', description: 'Complete 10 quizzes on weekends', category: 'special', icon: 'πŸŽ‰', points: 100, requirement_type: 'early_bird', requirement_value: 10, is_active: true, display_order: 18, created_at: new Date(), updated_at: new Date() }, { id: uuidv4(), name: 'Comeback King', slug: 'comeback-king', description: 'Score 90%+ after scoring below 50%', category: 'special', icon: 'πŸ’ͺ', points: 150, requirement_type: 'early_bird', requirement_value: 40, is_active: true, display_order: 19, created_at: new Date(), updated_at: new Date() } ]; await queryInterface.bulkInsert('achievements', achievements, {}); console.log('βœ… Seeded 20 demo achievements across all categories'); }, async down(queryInterface, Sequelize) { await queryInterface.bulkDelete('achievements', null, {}); console.log('βœ… Removed demo achievements'); } };