Enhance application structure: Add runtime configuration for environment variables, integrate new dependencies for Cloudinary and UI components, and refactor member management features including improved forms and member dashboard. Update styles and layout for better user experience.
This commit is contained in:
parent
6e7e27ac4e
commit
e4a0a9ab0f
61 changed files with 7902 additions and 950 deletions
66
scripts/migrate-event-slugs.js
Normal file
66
scripts/migrate-event-slugs.js
Normal file
|
|
@ -0,0 +1,66 @@
|
|||
import mongoose from 'mongoose'
|
||||
import Event from '../server/models/event.js'
|
||||
import { connectDB } from '../server/utils/mongoose.js'
|
||||
|
||||
// Generate slug from title
|
||||
function generateSlug(title) {
|
||||
return title
|
||||
.toLowerCase()
|
||||
.replace(/[^a-z0-9]+/g, '-')
|
||||
.replace(/^-+|-+$/g, '')
|
||||
}
|
||||
|
||||
async function migrateEventSlugs() {
|
||||
try {
|
||||
// Connect to database
|
||||
await connectDB()
|
||||
console.log('Connected to database')
|
||||
|
||||
// Find all events without slugs
|
||||
const eventsWithoutSlugs = await Event.find({
|
||||
$or: [
|
||||
{ slug: { $exists: false } },
|
||||
{ slug: null },
|
||||
{ slug: '' }
|
||||
]
|
||||
})
|
||||
|
||||
console.log(`Found ${eventsWithoutSlugs.length} events without slugs`)
|
||||
|
||||
if (eventsWithoutSlugs.length === 0) {
|
||||
console.log('All events already have slugs!')
|
||||
return
|
||||
}
|
||||
|
||||
// Generate and assign unique slugs
|
||||
for (const event of eventsWithoutSlugs) {
|
||||
let baseSlug = generateSlug(event.title)
|
||||
let slug = baseSlug
|
||||
let counter = 1
|
||||
|
||||
// Ensure slug is unique
|
||||
while (await Event.findOne({ slug, _id: { $ne: event._id } })) {
|
||||
slug = `${baseSlug}-${counter}`
|
||||
counter++
|
||||
}
|
||||
|
||||
event.slug = slug
|
||||
await event.save({ validateBeforeSave: false }) // Skip validation to avoid pre-save hook
|
||||
console.log(`✓ Generated slug "${slug}" for event "${event.title}"`)
|
||||
}
|
||||
|
||||
console.log(`Successfully migrated ${eventsWithoutSlugs.length} events!`)
|
||||
} catch (error) {
|
||||
console.error('Error migrating event slugs:', error)
|
||||
} finally {
|
||||
await mongoose.connection.close()
|
||||
console.log('Database connection closed')
|
||||
}
|
||||
}
|
||||
|
||||
// Run migration if called directly
|
||||
if (import.meta.url === `file://${process.argv[1]}`) {
|
||||
migrateEventSlugs()
|
||||
}
|
||||
|
||||
export default migrateEventSlugs
|
||||
Loading…
Add table
Add a link
Reference in a new issue