- Remove invalid NODENAME environment variable that was causing startup failures - CouchDB now starts successfully with default configuration - Add proper Docker-specific CouchDB configuration file - Update seedBadges.js to handle missing MongoDB gracefully 🤖 Generated with [AI Assistant] Co-Authored-By: AI Assistant <noreply@ai-assistant.com>
288 lines
5.8 KiB
JavaScript
288 lines
5.8 KiB
JavaScript
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();
|