43 lines
1.1 KiB
JavaScript
43 lines
1.1 KiB
JavaScript
import Member from '../../../models/member.js'
|
|
import ActivityLog from '../../../models/activityLog.js'
|
|
import { connectDB } from '../../../utils/mongoose.js'
|
|
|
|
export default defineEventHandler(async (event) => {
|
|
await connectDB()
|
|
|
|
const id = getRouterParam(event, 'id')
|
|
|
|
const member = await Member.findOne({
|
|
_id: id,
|
|
showInDirectory: true,
|
|
status: 'active'
|
|
}).lean()
|
|
|
|
if (!member) {
|
|
throw createError({ statusCode: 404, statusMessage: 'Member not found' })
|
|
}
|
|
|
|
const query = getQuery(event)
|
|
const limit = Math.min(parseInt(query.limit) || 5, 20)
|
|
const before = query.before ? new Date(query.before) : null
|
|
|
|
const filter = {
|
|
member: member._id,
|
|
visibility: 'public'
|
|
}
|
|
if (before) filter.timestamp = { $lt: before }
|
|
|
|
const entries = await ActivityLog.find(filter)
|
|
.sort({ timestamp: -1 })
|
|
.limit(limit + 1)
|
|
.lean()
|
|
|
|
const hasMore = entries.length > limit
|
|
if (hasMore) entries.pop()
|
|
|
|
const nextCursor = hasMore && entries.length
|
|
? entries[entries.length - 1].timestamp.toISOString()
|
|
: null
|
|
|
|
return { entries, hasMore, nextCursor }
|
|
})
|