require("dotenv").config(); const couchdbService = require("../services/couchdbService"); /** * Initial badge definitions * These badges will be auto-awarded when users meet the criteria */ const badges = [ // Street Adoption Badges { name: "First Adoption", description: "Adopted your first street", icon: "🏡", criteria: { type: "street_adoptions", threshold: 1, }, rarity: "common", order: 1, }, { name: "Street Adopter", description: "Adopted 5 streets", icon: "🏘️", criteria: { type: "street_adoptions", threshold: 5, }, rarity: "rare", order: 2, }, { name: "Neighborhood Champion", description: "Adopted 10 streets", icon: "🌆", criteria: { type: "street_adoptions", threshold: 10, }, rarity: "epic", order: 3, }, { name: "City Guardian", description: "Adopted 25 streets", icon: "🏙️", criteria: { type: "street_adoptions", threshold: 25, }, rarity: "legendary", order: 4, }, // Task Completion Badges { name: "First Task", description: "Completed your first task", icon: "✅", criteria: { type: "task_completions", threshold: 1, }, rarity: "common", order: 5, }, { name: "Task Master", description: "Completed 10 tasks", icon: "🎯", criteria: { type: "task_completions", threshold: 10, }, rarity: "rare", order: 6, }, { name: "Dedicated Worker", description: "Completed 50 tasks", icon: "🛠️", criteria: { type: "task_completions", threshold: 50, }, rarity: "epic", order: 7, }, { name: "Maintenance Legend", description: "Completed 100 tasks", icon: "⚡", criteria: { type: "task_completions", threshold: 100, }, rarity: "legendary", order: 8, }, // Post Creation Badges { name: "First Post", description: "Created your first post", icon: "📝", criteria: { type: "post_creations", threshold: 1, }, rarity: "common", order: 9, }, { name: "Social Butterfly", description: "Created 25 posts", icon: "🦋", criteria: { type: "post_creations", threshold: 25, }, rarity: "rare", order: 10, }, { name: "Community Voice", description: "Created 100 posts", icon: "📢", criteria: { type: "post_creations", threshold: 100, }, rarity: "epic", order: 11, }, { name: "Social Media Star", description: "Created 250 posts", icon: "⭐", criteria: { type: "post_creations", threshold: 250, }, rarity: "legendary", order: 12, }, // Event Participation Badges { name: "Event Participant", description: "Participated in your first event", icon: "🎉", criteria: { type: "event_participations", threshold: 1, }, rarity: "common", order: 13, }, { name: "Community Leader", description: "Participated in 5 events", icon: "👥", criteria: { type: "event_participations", threshold: 5, }, rarity: "rare", order: 14, }, { name: "Event Enthusiast", description: "Participated in 15 events", icon: "🎊", criteria: { type: "event_participations", threshold: 15, }, rarity: "epic", order: 15, }, { name: "Community Pillar", description: "Participated in 30 events", icon: "🏛️", criteria: { type: "event_participations", threshold: 30, }, rarity: "legendary", order: 16, }, // Points Badges { name: "Point Collector", description: "Earned 1,000 points", icon: "💰", criteria: { type: "points_earned", threshold: 1000, }, rarity: "rare", order: 17, }, { name: "Point Hoarder", description: "Earned 5,000 points", icon: "💎", criteria: { type: "points_earned", threshold: 5000, }, rarity: "epic", order: 18, }, { name: "Point Master", description: "Earned 10,000 points", icon: "👑", criteria: { type: "points_earned", threshold: 10000, }, rarity: "legendary", order: 19, }, ]; /** * Seed badges into CouchDB */ async function seedBadges() { try { console.log("Connecting to CouchDB..."); // Initialize CouchDB service await couchdbService.initialize(); console.log("Connected to CouchDB"); // Clear existing badges const existingBadges = await couchdbService.findByType('badge'); for (const badge of existingBadges) { await couchdbService.deleteDocument(badge._id, badge._rev); } console.log("Cleared existing badges"); // Insert new badges const couchdbBadges = badges.map((badge, index) => ({ _id: `badge_${Date.now()}_${index}`, type: 'badge', name: badge.name, description: badge.description, icon: badge.icon, criteria: badge.criteria, rarity: badge.rarity, order: badge.order, isActive: true, createdAt: new Date().toISOString(), updatedAt: new Date().toISOString() })); let successCount = 0; for (const badge of couchdbBadges) { await couchdbService.createDocument(badge); successCount++; } console.log(`Successfully seeded ${successCount} badges`); // Display created badges couchdbBadges.forEach((badge) => { console.log( ` ${badge.icon} ${badge.name} (${badge.rarity}) - ${badge.description}` ); }); console.log("\nDatabase seeding completed"); process.exit(0); } catch (error) { console.error("Error seeding badges to CouchDB:", error); process.exit(1); } } // Run the seeder seedBadges();