Files
tasks-backend/seeders/20251110193633-demo-achievements.js
2025-12-26 23:56:32 +02:00

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');
}
};