34 lines
988 B
JavaScript
34 lines
988 B
JavaScript
import Event from '../../models/event.js'
|
|
import { connectDB } from '../../utils/mongoose.js'
|
|
import { requireAuth } from '../../utils/auth.js'
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
const member = await requireAuth(event)
|
|
|
|
// Combine craft tags and cooperative ecology tags
|
|
const craftTags = member.craftTags || []
|
|
const ecologyTags = (member.communityEcology?.topics || []).map(t => t.tagSlug)
|
|
const memberTags = [...new Set([...craftTags, ...ecologyTags].filter(Boolean))]
|
|
|
|
if (!memberTags.length) {
|
|
return []
|
|
}
|
|
|
|
await connectDB()
|
|
|
|
const query = getQuery(event)
|
|
const limit = Math.min(Math.max(parseInt(query.limit) || 10, 1), 25)
|
|
|
|
const events = await Event.find({
|
|
tags: { $in: memberTags },
|
|
startDate: { $gt: new Date() },
|
|
isCancelled: { $ne: true },
|
|
isVisible: true
|
|
})
|
|
.sort({ startDate: 1 })
|
|
.limit(limit)
|
|
.select('title slug startDate endDate tagline tags eventType isOnline')
|
|
.lean()
|
|
|
|
return events
|
|
})
|