315 lines
8.4 KiB
JavaScript
315 lines
8.4 KiB
JavaScript
'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');
|
|
}
|
|
};
|